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

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

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

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

Q&A

解決済

1回答

4500閲覧

RSpecでFactory_botを導入した後にエラーでテストが実行できない

begenner

総合スコア79

RSpec

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

Ruby on Rails 4

Ruby on Rails4はRubyによって書かれたオープンソースのウェブフレームワークです。 Ruby on Railsは「設定より規約」の原則に従っており、効率的に作業を行うために再開発を行う必要をなくしてくれます。

0グッド

0クリップ

投稿2019/02/13 10:34

現在RSpecにてモデルのテストを行なっています。

Everyday Rails… Aaron Sumner 著 et al. [Leanpub PDF/iPad/Kindle]

を参考にしていましたが、自分の作成しているアプリに導入した時、 gemをFactory_botに切り替えました。

下記を参考に各種変更を行いました。

【翻訳】"Factory Girl"が"Factory Bot"に変わった理由(と移行手順) - Qiita

するとテストを実行する前やローカルサーバーの起動時にもエラーが発生してしまい
何が原因かわかりません。エラー文の内容は同じです(m_ m)
わかる方がいらっしゃれば教えていただきますようよろしくお願いいたします(m
_m)

###エラー内容
bundle exec rails s -b 0.0.0.0コマンドとbundle exec rspecコマンドでは下記のエラー文が出ています

/vendor/bundle/ruby/2.3.0/gems/factory_bot-5.0.0/lib/factory_bot/definition_proxy.rb:97:in `method_missing': undefined method 'email' in 'user' factory (NoMethodError)

こちらのサイトを参考にしてbundle exec rake db:migrate RAILS_ENV=testを実行したところ下記のエラーが表示されました

rake aborted! NoMethodError: undefined method 'email' in 'user' factory

###期待する動作

  • factoryのエラーが治ること
  • ローカルサーバーが正常に動作すること

###動作環境
OS:mac
Ruby:2.3.5
Ruby on Rails: 4.2.5
MySQL: 5.7.18

gem:
devise:4.6.1
rspec-core: 3.6.0
factory_bot_rails: 5.0.1

###補足情報

  • factory_girl 導入時は問題なく動作していました。
  • テストファイルはまだbin/rails g factory_girl:model userコマンドを実行して作成されたuser_specファイルのみです

###該当のソースコード

ruby

1# Gemfile 2group :development, :test do 3 gem 'rspec-rails', '~> 3.6.0' 4 gem 'factory_bot_rails' 5end

ruby

1# db/schema.rb 2 create_table "users", force: :cascade do |t| 3 t.string "email", limit: 255, default: "", null: false 4 t.string "encrypted_password", limit: 255, default: "", null: false 5 t.string "reset_password_token", limit: 255 6 t.datetime "reset_password_sent_at" 7 t.datetime "remember_created_at" 8 t.integer "sign_in_count", limit: 4, default: 0, null: false 9 t.datetime "current_sign_in_at" 10 t.datetime "last_sign_in_at" 11 t.string "current_sign_in_ip", limit: 255 12 t.string "last_sign_in_ip", limit: 255 13 t.datetime "created_at", null: false 14 t.datetime "updated_at", null: false 15 t.string "confirmation_token", limit: 255 16 t.datetime "confirmed_at" 17 t.datetime "confirmation_sent_at" 18 t.string "unconfirmed_email", limit: 255 19 t.string "provider", limit: 255 20 t.string "uid", limit: 255 21 t.datetime "soft_destroyed_at" 22 end

ruby

1# spec/factories/users.rb 2FactoryBot.define do 3 factory :user do 4 email "tester@example.com" 5 password "dottle-nouveau123" 6 end 7end 8

ruby

1# spec/models/user_spec.rb 2 it "メールがあれば有効であること" do 3 expect(FactoryBot.build(:user)).to be_valid 4 end

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

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

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

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

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

guest

回答1

0

自己解決

"Factory Girl"と"Factory Bot"では微妙に書き方が違いました。
Factory Botでは{}が必要でした。
Home · thoughtbot/factory_bot Wiki

# spec/factories/users.rb FactoryBot.define do factory :user do email {"tester@example.com"} password {"dottle-nouveau123"} end end

投稿2019/02/13 12:06

begenner

総合スコア79

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.49%

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

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

質問する

関連した質問