質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

87.36%

RSpecのテスト bundle exec rspecを実行したらNoMethodError:が出てしまった

解決済

回答 2

投稿 編集

  • 評価
  • クリップ 0
  • VIEW 912

score 10

前提・実現したいこと

正直どこを直したらいいのか調べても全く分からない状況です。
binding.pryもなぜか効きません。
すみませんがわかる方がいらしゃいましたら教えていただけると助かります。
よろしくお願い致します。

gem 'rspec-rails', '~> 4.0.0.beta2'

発生している問題・エラーメッセージ

DEPRECATION WARNING: #fog_provider is deprecated and has no effect (called from block in <main> at /Users/〇〇/projects/〇〇/config/initializers/carrierwave.rb:7)

Item
  #create
    商品名、価格、商品説明、カテゴリー、商品状態、配送料の負担、発送元の地域、発送までの日数、が入力されていれば出品できる (FAILED - 1)
    商品名が空では出品できない (FAILED - 2)
    商品説明が空では出品できない (FAILED - 3)
    カテゴリーが空では出品できない (FAILED - 4)
    商品の状態が空では出品できない (FAILED - 5)
    配送料の負担が空では出品できない (FAILED - 6)
    配送元の地域が空では出品できない (FAILED - 7)
    発送までの日数が空では出品できない (FAILED - 8)
    価格が空では出品できない (FAILED - 9)
    価格が数字でない場合(文字列の場合)は、出品できない (FAILED - 10)

Failures:

  1) Item#create 商品名、価格、商品説明、カテゴリー、商品状態、配送料の負担、発送元の地域、発送までの日数、が入力されていれば出品できる
     Failure/Error: item = build(:item)

     NoMethodError:
       undefined method `build' for #<RSpec::ExampleGroups::Item::Create:0x00007fd9b7ca5c18>
     # ./spec/models/item_spec.rb:7:in `block (3 levels) in <top (required)>'

  2) Item#create 商品名が空では出品できない
     Failure/Error: item = FactoryBot.build(:item, name: "")

     ArgumentError:
       '1' is not a valid condition
     # ./spec/models/item_spec.rb:13:in `block (3 levels) in <top (required)>'

  3) Item#create 商品説明が空では出品できない
     Failure/Error: item = FactoryBot.build(:item, detail: "")

     ArgumentError:
       '1' is not a valid condition
     # ./spec/models/item_spec.rb:20:in `block (3 levels) in <top (required)>'

  4) Item#create カテゴリーが空では出品できない
     Failure/Error: item = FactoryBot.build(:item, category_id: "")

     ArgumentError:
       '1' is not a valid condition
     # ./spec/models/item_spec.rb:26:in `block (3 levels) in <top (required)>'

  5) Item#create 商品の状態が空では出品できない
     Failure/Error: item = FactoryBot.build(:item, condition: "")

     ArgumentError:
       '1' is not a valid fee
     # ./spec/models/item_spec.rb:32:in `block (3 levels) in <top (required)>'

  6) Item#create 配送料の負担が空では出品できない
     Failure/Error: item = FactoryBot.build(:item, delivery_fee: "")

     ArgumentError:
       '1' is not a valid condition
     # ./spec/models/item_spec.rb:38:in `block (3 levels) in <top (required)>'

  7) Item#create 配送元の地域が空では出品できない
     Failure/Error: item = FactoryBot.build(:item, city: "")

     ArgumentError:
       '1' is not a valid condition
     # ./spec/models/item_spec.rb:44:in `block (3 levels) in <top (required)>'

  8) Item#create 発送までの日数が空では出品できない
     Failure/Error: item = FactoryBot.build(:item, delivery_date: "")

     ArgumentError:
       '1' is not a valid condition
     # ./spec/models/item_spec.rb:50:in `block (3 levels) in <top (required)>'

  9) Item#create 価格が空では出品できない
     Failure/Error: item = FactoryBot.build(:item, price: "")

     ArgumentError:
       '1' is not a valid condition
     # ./spec/models/item_spec.rb:56:in `block (3 levels) in <top (required)>'

  10) Item#create 価格が数字でない場合(文字列の場合)は、出品できない
      Failure/Error: item = FactoryBot.build(:item, price: "aaaa")

      ArgumentError:
        '1' is not a valid condition
      # ./spec/models/item_spec.rb:62:in `block (3 levels) in <top (required)>'

Finished in 0.08192 seconds (files took 3.77 seconds to load)
10 examples, 10 failures

Failed examples:

rspec ./spec/models/item_spec.rb:6 # Item#create 商品名、価格、商品説明、カテゴリー、商品状態、配送料の負担、発送元の地域、発送までの日数、が入力されていれば出品できる
rspec ./spec/models/item_spec.rb:12 # Item#create 商品名が空では出品できない
rspec ./spec/models/item_spec.rb:19 # Item#create 商品説明が空では出品できない
rspec ./spec/models/item_spec.rb:25 # Item#create カテゴリーが空では出品できない
rspec ./spec/models/item_spec.rb:31 # Item#create 商品の状態が空では出品できない
rspec ./spec/models/item_spec.rb:37 # Item#create 配送料の負担が空では出品できない
rspec ./spec/models/item_spec.rb:43 # Item#create 配送元の地域が空では出品できない
rspec ./spec/models/item_spec.rb:49 # Item#create 発送までの日数が空では出品できない
rspec ./spec/models/item_spec.rb:55 # Item#create 価格が空では出品できない

該当のソースコード

item_spec.rb

require 'rails_helper'

describe Item do
  describe "#create" do

    it "商品名、価格、商品説明、カテゴリー、商品状態、配送料の負担、発送元の地域、発送までの日数、が入力されていれば出品できる" do
      item = build(:item)
      binding.pry
      expect(item).to be_valid
    end

    it "商品名が空では出品できない" do
      item = FactoryBot.build(:item, name: "")
      item.valid?
      binding.pry
      expect(item.errors[:name]).to include("can't be blank")
    end

    it "商品説明が空では出品できない" do
      item = FactoryBot.build(:item, detail: "")
      item.valid?
      expect(item.errors[:detail]).to include("can't be blank")
    end

    it "カテゴリーが空では出品できない" do
      item = FactoryBot.build(:item, category_id: "")
      item.valid?
      expect(item.errors[:category_id]).to include("can't be blank")
    end

    it "商品の状態が空では出品できない" do
      item = FactoryBot.build(:item, condition: "")
      item.valid?
      expect(item.errors[:condition]).to include("can't be blank")
    end

    it "配送料の負担が空では出品できない" do
      item = FactoryBot.build(:item, delivery_fee: "")
      item.valid?
      expect(item.errors[:delivery_fee]).to include("can't be blank")
    end

    it "配送元の地域が空では出品できない" do
      item = FactoryBot.build(:item, city: "")
      item.valid?
      expect(item.errors[:city]).to include("can't be blank")
    end

    it "発送までの日数が空では出品できない" do
      item = FactoryBot.build(:item, delivery_date: "")
      item.valid?
      expect(item.errors[:delivery_date]).to include("can't be blank")
    end

    it "価格が空では出品できない" do
      item = FactoryBot.build(:item, price: "")
      item.valid?
      expect(item.errors[:price]).to include("can't be blank")
    end

    it "価格が数字でない場合(文字列の場合)は、出品できない" do
      item = FactoryBot.build(:item, price: "aaaa")
      item.valid?
      expect(item.errors[:price]).to include("not a number")
    end
  end
end
FactoryBot.define do

  factory :item do
    name              {"abe"}
    detail            {"aaa"}
    category_id       {"1"}
    condition         {"1"}
    fee               {"1"}
    prefecture        {"aaa"}
    delivery_date     {"1"}
    price             {"111"}
  end
end


image_spec.rb

require 'rails_helper'

describe Image do
  before do
    @image = build(:image)
  end
  describe "create" do

    it "画像入力されていれば出品できる" do
      image = FactoryBot.build(:image)
      expect(image).to be_valid
    end

    it "商品画像が空では出品できない" do
      image = FactoryBot.build(:image, image: "")
      image.valid?
      expect(image.error(:image)).to include("can`t be blank")
    end
  end
end


images.rb

FactoryBot.define do

  factory :image do
    image              {"aaa.jpg"}
  end
end


.rspec

--require spec_helper
--format documentation
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

0

Item.buildではないでしょうか?

FactoryBotを使うなら

it "商品名、価格、商品説明、カテゴリー、商品状態、配送料の負担、発送元の地域、発送までの日数、が入力されていれば出品できる" do
  item = FactoryBot.build(:item)
  expect(item).to be_valid
end

こう書きます

Factoryの書き方も通常
validとなるような適当なデータを用意するのが一般的なように思います
その上で

  user = FactoryBot.build(:user, email: "")


といったようにinvalidとなる条件を加える
流れのほうが自然かと

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2020/08/21 19:30

    Factoryについても回答を加えていますのでご確認ください

    キャンセル

  • 2020/08/23 17:28 編集

    ご丁寧に解説していただきありがとうございます。
    今回のエラーは無事解決しました。
    結論から言いますと、enumの記述をしているものは ""は付けないとの事でした、
    下記の記述でcondition、fee、delivery_dateはenumの記述をしていたので""を付けないで記述したところエラーがなくなりました。
    下記は修正したものです。
    FactoryBot.define do

    factory :item do
    name {"abe"}
    detail {"aaa"}
    category_id {"1"}
    condition {1} ◀︎
    fee {1} ◀︎
    prefecture {"aa"}
    delivery_date {1} ◀︎
    price {"111"}
    end
    end

    キャンセル

  • 2020/08/23 17:40

    今回はコメントしていただきありがとうございました。
    返信が遅くなってしまう事が多くあり申し訳ありませんでした。
    また何かありましたらよろしくお願い致します。
    今回はありがとうございました。
    勉強になりました。

    キャンセル

check解決した方法

-1

今回のエラーは無事解決しました。
結論から言いますと、enumの記述をしているものは ""は付けないとの事でした、
下記の記述でcondition、fee、delivery_dateはenumの記述をしていたので""を付けないで記述したところエラーがなくなりました。
下記は修正したものです。

FactoryBot.define do

 factory :item do
  name {"abe"}
  detail {"aaa"}
  category_id {"1"}
  condition {1} ◀︎修正
  fee {1} ◀︎修正
  prefecture {"aa"}
  delivery_date {1} ◀︎修正
  price {"111"}
 end
end

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 87.36%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る