0

ここのドキュメントに基づいて、各例でインスタンス化されたものを let メソッドに配置することにより、いくつかの仕様をクリーンアップしようとしています: https://www.relishapp.com/rspec/rspec-core/v/2-13/docs /helper-methods/let-and-let !. 2 番目の仕様の ObjectConnection ピースは、main_menu の一部として作成されます。Rails コンソール経由で実行すると、問題なく動作します。

describe "shall comment on items" do

  let(:menu) { FactoryGirl.create(:main_menu) } # i am assuming that I have access to a menu variable

  # this one works
  it 'should submit a message to a valid location' do
    kt=menu.location
    xhr :post, :create_message, {content: "here is my content", associated_global_id: kt.global_id }
    response.code.should == "200"
  end

  # this one doesn't
  it 'should submit a message to a valid object connection' do
    pairing=ObjectConnection.first # multiple ObjectConnections are created as part of the main_menu factory
    xhr :post, :create_message, {content: "here is my approval of your pairing seneor", associated_global_id: pairing.global_id } # this is where the error is
    response.code.should == "200"
  end
end

実行すると、次のようになります。

 undefined method `global_id' for nil:NilClass 

2番目の例で

これはどのように機能するべきですか?または、各例で menu=FactoryGirl.create(:main_menu) を宣言する必要がありますか?

4

2 に答える 2

2

let!オブジェクトのインスタンス化の副作用をテストする場合に使用します。

通常letは遅延ロードされます。

于 2013-05-30T17:12:52.110 に答える