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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Q&A

解決済

2回答

1711閲覧

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

ntk__7__ksn

総合スコア14

Ruby

Rubyはプログラミング言語のひとつで、オープンソース、オブジェクト指向のプログラミング開発に対応しています。

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

RSpec

RSpecはRuby用のBDD(behaviour-driven development)フレームワークです。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

0グッド

0クリップ

投稿2020/08/20 13:01

編集2020/08/21 09:56

#前提・実現したいこと
正直どこを直したらいいのか調べても全く分からない状況です。
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

気になる質問をクリップする

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

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

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

今回のエラーは無事解決しました。
結論から言いますと、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 08:33

ntk__7__ksn

総合スコア14

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

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/20 17:17

編集2020/08/21 10:20
naokit-dev

総合スコア424

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

ntk__7__ksn

2020/08/21 09:49

返信遅れてすみません。 いくつか修正しました。 それでも同じエラーが出てしまいます。 修正しなけれべいけ無い部分はどこなのかわかりますでしょうか。
naokit-dev

2020/08/21 10:00

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

2020/08/21 10:04

すみません! item = build(:item) の部分を item = Item.build に変更ということで合ってますか?
naokit-dev

2020/08/21 10:09

他のものに合わせるのなら item = FactoryBot.build(:item) です buildはクラスメソッドですので User.buildというように用います だから当初NoMethodErrorが出ていたと考えています
ntk__7__ksn

2020/08/21 10:26

item = FactoryBot.build(:item) に変更しても下記のエラーが出ています。 ArgumentError: '1' is not a valid condition
naokit-dev

2020/08/21 10:30

'1' is not a valid condition そのままでfactoryに定義されている"1"というパラメータが invalidな条件なのではないでしょうか?
naokit-dev

2020/08/21 10:30

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

2020/08/23 08:31 編集

ご丁寧に解説していただきありがとうございます。 今回のエラーは無事解決しました。 結論から言いますと、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
ntk__7__ksn

2020/08/23 08:40

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問