【发布时间】:2017-11-19 13:27:11
【问题描述】:
我想使用接收匿名块且不引发错误的 rspec 来测试该方法的功能。以下是我的代码:
class SP
def speak(options={},&block)
puts "speak called"
block.call()
rescue StandardError => e
puts e.inspect()
end
end
describe SP do
it "testing speak functionality not to raise error" do
sp = SP.new
sp_mock = double(sp)
expect(sp_mock).to receive(:speak).with(sp.speak{raise StandardError}).not_to raise_error
end
end
下面是抛出错误
SP testing speak functionality not to raise error
Failure/Error: expect(sp).to receive(:speak).with(sp.speak{raise StandardError})
(#<SP:0x007fead2081d20>).speak(nil)
expected: 1 time with arguments: (nil)
received: 0 times
# ./test.rb:22:in `block (2 levels) in <top (required)>'
花了很多时间浏览 ruby 块和 ruby 文档的文章,但无法弄清楚。
【问题讨论】:
-
您无需在帖子中添加“已编辑”。这不是reddit。我们可以查看帖子编辑的完整历史记录。
-
您的期望是 sp_mock 可以通过 speak 调用,但您没有在测试中调用 sp_mock.speak。
标签: ruby rspec ruby-block