2013-10-31 26 views
5

我有一個控制器的規格是這樣的爲無工廠女孩未定義的方法:NilClass

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 

導致此:

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 

我的信用卡廠是這樣的:

FactoryGirl.define do 
    factory :credit_card_account do 
    exp_month 10 
    exp_year 2075 
    number '3' 
    end 
end 

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

=> CreditCardAccount(id: integer, exp_month: integer, exp_year: integer, number: string) 

版本

0 HAL:0 work/complex_finance % bundle show rails rspec-rails factory_girl 
/home/brundage/.rvm/gems/[email protected]_finance/gems/rails-4.0.0 
/home/brundage/.rvm/gems/[email protected]_finance/gems/rspec-rails-2.14.0 
/home/brundage/.rvm/gems/[email protected]_finance/gems/factory_girl-4.2.0 
+0

所有看起來都合法的我。你有沒有準備好你的測試數據庫,即。 'rake db:test:prepare'? – sevenseacat

+0

是的。在執行'RAILS_ENV = test rake db:wipe db:migrate db:seed'之前。 (db:wipe是一個自定義任務,只是刪除所有的表) –

+1

你可以嘗試實際運行'rake db:test:prepare'嗎? – sevenseacat

回答

0

這應該是工作。所有的觀點都表明你的測試數據庫不正確。

RAILS_ENV=test rake db:drop db:create將刪除並重新創建您的測試數據庫。然後嘗試使用rake命令運行您的rspec,以遷移數據庫:rake rspec

+0

謝謝,但事實並非如此。 –

+0

@DeanBrundage對不起。將讓那裏的答案可能幫助谷歌到這裏的人。你可以在你的測試數據庫中看到這個列嗎?你的'db/schema.rb'正確嗎? – fotanus

+0

對兩者都是。 。 。 –

0

我遇到了同樣的問題,但我認爲我的問題的原因是不同的。然而,我的解決方案可能有用:我使用Fabrication gem(http://www.fabricationgem.org/)代替FG。

我之所以會出現這個問題,是因爲我試圖讓FG創建/構建一個不是ActiveRecord的對象,它只是一個ActiveModel,而且它必須用參數初始化。

我沒有製造者文檔中看到一個例子完全像我所需要的,但我這句法得到它:

加工廠(:my_class)做 on_init做 init_with(「公司名稱」, 「僞第二個arg」) 結束 結束

0

我的問題是,在模型中,我做了一個名爲:send(忘記它已經在Ruby中使用)的私有方法。