在编写RSpec测试时,我发现自己编写了很多类似这样的代码,以确保在测试执行期间调用了一个方法(为了方便讨论,我们只能说我无法在调用后真正询问对象的状态,因为方法执行的操作不容易看到其效果)。
describe "#foo"
it "should call 'bar' with appropriate arguments" do
called_bar = false
subject.stub(:bar).with("an argument I want") { called_bar = true }
subject.foo
expect(called_bar).to be_true
end
end
我想知道的是:还有比这更好的语法吗?我是不是错过了一些时髦的RSpec,它可以把上面的代码减少到几行?should_receive
听起来应该这样做,但进一步阅读,它听起来并不完全是这样做的。
4条答案
按热度按时间jucafojl1#
yxyvkwin2#
在新的
rspec
expect
syntax中,这将是:dgsult0t3#
以下方法应该有效
文件:https://github.com/rspec/rspec-mocks#expecting-arguments
dy2hfwbg4#
为了完全符合RSpec ~〉3.1语法和
rubocop-rspec
规则的默认选项RSpec/MessageSpies
,下面是您可以对spy
执行的操作:消息预期将示例的预期放在开始,在您调用被测代码之前。许多开发人员更喜欢使用arrange-act-assert(或given-when-then)模式来构建测试。间谍是一种替代类型的双精度测试,它支持这种模式,允许您使用have_received来预期消息在事实发生后已经收到。
如果你不使用rubocop-rspec或者使用非默认选项,你当然可以使用RSpec 3默认和expect。