工厂女孩未定义的nil方法:NilClass

Dea*_*age 5 ruby ruby-on-rails rspec2 factory-bot

我有一个像这样的控制器规格

describe :bizzaro_controller do

  let(:credit_card_account) { FactoryGirl.build :credit_card_account }

  it "doesn't blow up with just the stub" do
    CreditCardAccount.stub(:new).and_return(credit_card_account)
  end

  it "doesn't blow up" do
    credit_card_account
    CreditCardAccount.stub(:new).and_return(credit_card_account)
  end

end
Run Code Online (Sandbox Code Playgroud)

结果如下:

bizzaro_controller
  doesn't blow up with just the stub (FAILED - 1)
  doesn't blow up

Failures:

  1) bizzaro_controller doesn't blow up
     Failure/Error: let(:credit_card_account) { FactoryGirl.build :credit_card_account }
     NoMethodError:
       undefined method `exp_month=' for nil:NilClass
     # ./spec/controllers/user/bizzareo_controller_spec.rb:5:in `block (2 levels) in <top (required)>'
     # ./spec/controllers/user/bizzareo_controller_spec.rb:9:in `block (3 levels) in <top (required)>'

Finished in 0.23631 seconds
2 examples, 1 failure
Run Code Online (Sandbox Code Playgroud)

我的信用卡工厂看起来像这样:

FactoryGirl.define do
  factory :credit_card_account do
    exp_month 10
    exp_year 2075
    number '3'
  end
end
Run Code Online (Sandbox Code Playgroud)

我的CreditCardAccount是一个空的ActiveRecord :: Base模型

=> CreditCardAccount(id: integer, exp_month: integer, exp_year: integer, number: string)
Run Code Online (Sandbox Code Playgroud)

版本

0 HAL:0 work/complex_finance % bundle show rails rspec-rails factory_girl
/home/brundage/.rvm/gems/ruby-2.0.0-p247@complex_finance/gems/rails-4.0.0
/home/brundage/.rvm/gems/ruby-2.0.0-p247@complex_finance/gems/rspec-rails-2.14.0
/home/brundage/.rvm/gems/ruby-2.0.0-p247@complex_finance/gems/factory_girl-4.2.0
Run Code Online (Sandbox Code Playgroud)

fot*_*nus 0

这应该有效。所有这些都表明您的测试数据库不正确。

RAILS_ENV=test rake db:drop db:create将删除并重新创建您的测试数据库。然后尝试使用 rake 命令运行 rspec,以迁移数据库:rake rspec