0

次のように定義されたモデルとメソッドがあります。

class Farm < ActiveRecord::Base
   def flags
    #has other code which returns a flag_details hash eg:
    # flag_details['flag1'] = true;
    # flag_details['flag2'] = false;
  end

end

ここで、設定/設定解除されたフラグに基づいて特定の div が表示されることを確認するテストを作成する必要があります。そして、これらのフラグを返すことができるようにスタブを作成し、ページが正しい div を表示しているかどうかをテストしたいと考えています。意図したものを得るために、次のコードを修正するにはどうすればよいですか。

  scenario "display div named flower when flag1 or flag2 is false" do
    farm.stub(:flags).and_return("flag1" => false, "flag2" => false)
    if !farm.flags['flag1'] || !farm.flags['flag2']
      expect(page).to have_selector('div.flower', text: "4" )
    end    
  end

私はルビー、レール、および rspec の初心者なので、どんな助けでも素晴らしいです。また、次の方法を使用してみましたが、うまくいきませんでした。

farm.stub(:flags[]).with('flag1').and_return(false)
farm.stub(:flags[]).with('flag2').and_return(false)

このドキュメント ( https://www.relishapp.com/rspec/rspec-mocks/v/2-4/docs/method-stubs ) も確認しましたが、回答が得られませんでした。これに役立つ可能性のある他のリンクは、本当に感謝しています!

ありがとう!

4

2 に答える 2

4

その戻り値を中かっこ ( {}) で囲むだけで、問題が解決するはずです。

farm.stub(:flags).and_return({"flag1" => false, "flag2" => false})
于 2013-10-11T01:13:58.167 に答える
2

まず、テストの if 条件を取り除きます。テストに制御フローを追加する理由はありません。スタブの仕組み: テストでは、そのファーム オブジェクトで flags メソッドを呼び出す必要があり、指定したハッシュが返されます。シナリオで問題のページにアクセスし、期待どおりに動作していることを確認してください。

于 2013-10-11T01:16:55.303 に答える