5

私はこのようなコントローラー仕様を持っています

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/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
4

3 に答える 3

0

私の問題は、モデルでプライベートメソッドを作成した:sendことです(Rubyで既に使用されていることを忘れていました)。

于 2015-02-06T12:38:50.720 に答える
0

これは機能するはずです。テストデータベースが正しくないというすべてのポイント。

RAILS_ENV=test rake db:drop db:createテストデータベースを削除して再作成します。次に、データベースを移行するために、rake コマンドを使用して rspec を実行してみます。rake rspec

于 2013-10-31T02:47:26.003 に答える
0

私は同じ問題を抱えていましたが、私の問題の原因は異なっていたと思います。ただし、私の解決策はおそらく役立つかもしれません。FGの代わりにFabrication gem ( http://www.fabricationgem.org/ ) を使用しました。

この問題が発生した理由は、FG に ActiveRecord ではないオブジェクトを作成/構築させようとしていたためです。これは ActiveModel のみであり、引数で初期化する必要がありました。

Fabricator のドキュメントには、私が必要としていたものとまったく同じ例はありませんでしたが、次の構文で取得しました。

Fabricator(:my_class) do on_init do init_with("Company Name", "Fake second arg") end end

于 2014-04-21T05:55:11.570 に答える