現在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
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。