私がテストしようとしているこの方法を持っている:rspecテストでletとallowの違い。両方のスタブをしますか?
def build
return if !cookies["__utmz"] && !cookies["__utma"]
binding.pry
@data = GaCookieParser::GaCookieParser.new(
utmz: cookies["__utmz"],
utma: cookies["__utma"]
)
build_utmz
build_utma
TrafficSource.new(params)
end
これは私のテストで:
context 'when cookies have necessary params' do
let(:cookies) { complete_cookies }
let(:complete_cookies) do
{
'__utmz' => 'something',
'__utma' => 'something'
}
end
私はLETを使用して、私はバインディング、「クッキー」を打ったとき確かにリターンを行います私はcomplete_cookies。
letは実際のコードのどこにでもメソッドをスタブするのに対して、テストの中ではメソッドを「スタブ」するだけです。
「許可」を使用できますか、それとも互換性がありますか?私は許可がスタブのためだと思っていたし、オブジェクトが実際にメソッドを受け取ることをテストするための 'expect'があった。 https://www.relishapp.com/rspec/rspec-mocks/docs – Jwan622
@ Jwan622あなたは正しく 'allow'がスタブを作成し、' expect'がモックを作成します。自分のニーズに合ったものを自分で決める必要があります。ここでは問題に関する議論があります。[RSpec allow/expect vs just expect/and_return](http://stackoverflow.com/questions/28006913/rspec-allow-expect-vs-just-expect-and-return)ここにあなたはそれらを交互に使用することはできません - その1つを使用してください(あなたはrspec let()を使うべきですか?)(http://stackoverflow.com/questions/5359558/when-to-use-rspec-let) –
はい、適切な...しかし、彼らはどちらも密接に関連しています(あなたは方法を書いてあなたの選択の価値を戻しています)。一方、letはどちらかとは全く異なるものです。 –