【问题标题】:How to save a variable in an rspec expect?如何在 rspec 期望中保存变量?
【发布时间】:2017-04-18 16:27:34
【问题描述】:
我的spec 文件之一中包含以下内容:
expect(my_instance).to receive(:my_function).with(arg: instance_of(String))
我希望能够在我可以在规范中使用的变量中捕获arg 的实际值。有没有办法做到这一点?我检查了 rspec 文档,但没有找到类似的内容。
【问题讨论】:
标签:
ruby-on-rails
ruby
unit-testing
rspec
【解决方案1】:
您可以在expect 之前声明变量,例如captured_arg(或allow,如果您不希望它在my_instance 没有收到my_function 时失败)。然后你可以在一个块中收集参数并在该块中设置captured_arg。
captured_arg = nil
expect(my_instance).to receive(:my_function) { |arg| captured_arg = arg }
编辑:(关键字参数)
如果您使用keyword arguments,只需稍微修改上面的脚本,使用arg 作为您要捕获的关键字参数:
captured_arg = nil
expect(my_instance).to receive(:my_function) { |args| captured_arg = args[:arg] }