RSpec隐含主题似乎失败,明确的主题起作用

时间:2012-10-04 18:07:40

标签: ruby rspec

我有一个简单的测试,它似乎有不同的行为取决于我是否使用明确的主题。

context "successful validation" do
  subject(:invitation) {invitations(:emmet_invite)}
  after do
    invitation.send_voucher
  end
  it "calls hotel_booked?" do
    invitation.should_receive(:hotel_booked?).and_return(true) #works
  end

  it {should_receive(:hotel_booked?).and_return(true)} #fails
end

这里有什么问题?

2 个答案:

答案 0 :(得分:1)

在rspec-mocks中查看此github问题:https://github.com/rspec/rspec-mocks/issues/148

引用:

  

添加隐含主题以支持一线预期,但我不相信它曾用于模拟期望。对于模拟期望有任何意义,在设置之后,示例中必须有一些代码,因此使用一个衬里并没有意义。

基本上,你不能将should_receive与隐含主题一起使用。

答案 1 :(得分:0)

您可以使用subject来获取隐含的主题:

it { subject.should_receive(:hotel_booked?).and_return(true) }

虽然这不像你的显式例子那么容易阅读。