1
我有這樣的方法,我試圖測試一下:在rspec測試中允許和允許之間的區別。做兩個存根?
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
我用一讓,當我打的結合,「曲奇」確實不會返回我complete_cookies。
讓我們只應該在測試權限內「存根」方法,而允許將方法存根在實際代碼中的任何地方?
你可以使用「允許」並期望互換嗎?我認爲allow是用於存根的,'expect'用於測試一個對象實際上是否接收了一個方法。 https://www.relishapp.com/rspec/rspec-mocks/docs – Jwan622
@ Jwan622你是對的'allow'創建一個存根,而'expect'創建一個模擬。你需要自己決定哪一個更適合你的需求。這裏是關於這個問題的討論[RSpec允許/期望vs只是期望/ and_return](http://stackoverflow.com/questions/28006913/rspec-allow-expect-vs-just-expect-and-return),這裏是討論讓[當何時使用rspec let()?](http://stackoverflow.com/questions/5359558/when-to-use-rspec-let) –
是的,你不能互換使用它們 - 使用一個適當的......但是它們都是密切相關的東西(你正在對一種方法進行討論並返回一個你選擇的值),而'let'與兩者都是非常不同的東西。 –