0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【RSpec】gem "factory_bot_rails"でNameError:uninitialized constant FactryBot

0
Posted at

環境

ruby 2.6.3
Rails 5.1.1

gem "rspec-rails", '~> 3.6.0'
gem "factory_bot_rails", "~>4.11.0"

発生した状況

spec/factories/users.rb
FactoryBot.define do
  factory :user do
    first_name {"Aaron"}
    Last_name {"Sumner"}
    email {"tester@example.com"}
    password {"password"}
  end
end
spec/models/user_spec.rb
RSpec.describe User, type: :model do

  it "has a valid factory" do
    expect(FactoryBot.build(:user)).to be_valid
  end

end

発生したエラー

$ bin/rspec
# 略
Failures:

  1) User has a valid factory
     Failure/Error: expect(FactryBot.build(:user)).to be_valid

     NameError:
       uninitialized constant FactryBot
     # ./spec/models/user_spec.rb:9:in `block (2 levels) in <top (required)>'
     # -e:1:in `<main>'

Finished in 0.49794 seconds (files took 0.46908 seconds to load)
13 examples, 1 failure

Failed examples:

rspec ./spec/models/user_spec.rb:8 # User has a valid factory

対処

初めてFactoryBotを使用したので設定が悪いのかな〜?と調べてみて次の記事などを参考にするも解決せず
RSpecを導入した時、詰まったこと(NameError: uninitialized constant)

試しに次のようにコードを変更するとメッセージが変わった

spec/models/user_spec.rb
RSpec.describe User do # type: :model を削除

  it "has a valid factory" do
    expect(FactoryBot.build(:user)).to be_valid
  end

end
$ bin/rspec
# 略
Failures:

  1) User has a valid factory
     Failure/Error: expect(FactoryBot.build(:user)).to be_valid

     NoMethodError:
       undefined method `Last_name=' for #<User:0x00007f9d1c450428>
       Did you mean?  last_name
                      last_name?
                      first_name=
     # ./spec/models/user_spec.rb:9:in `block (2 levels) in <top (required)>'
     # -e:1:in `<main>'

Finished in 0.51206 seconds (files took 0.36496 seconds to load)
13 examples, 1 failure

Failed examples:

rspec ./spec/models/user_spec.rb:8 # User has a valid factory

はい!単なるスペルミスです!
最初に疑うべきでしたね...

修正後がこちら

spec/factories/users.rb
FactoryBot.define do
  factory :user do
    first_name {"Aaron"}
    last_name {"Sumner"} #Last_nameになっていた
    email {"tester@example.com"}
    password {"password"}
  end
end

後書き

記事に残すまでも無いような内容ですが検索して1件もヒットしなかったので一応...
あと自分への戒めですね。。

describe で type: :model を削除するとエラーメッセージが変わったのは不思議でしたがまた使えそう?なので覚えておこうと思います。
理由が分かる方がいましたら是非コメントで教えてください!

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?