0

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

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

这里有什么问题?

4

2 回答 2

1

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

引用:

添加了隐式主题以支持单行期望,但我不相信它曾经打算与模拟期望一起使用。为了使模拟期望有意义,在设置之后必须在示例中包含一些代码,因此将其用于一个衬里并没有真正意义。

所以基本上,你不能使用should_receive隐含的主题。

于 2012-10-04T22:39:42.377 回答
0

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

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

尽管这不像您的明确示例那么容易阅读。

于 2012-10-05T01:26:57.307 回答