【发布时间】:2015-10-28 18:37:24
【问题描述】:
我正在尝试使用新语法对Slack gem 进行存根(旧语法会引发相同的错误):
before :each do
allow(Slack).to receive(:channels_join).and_return(true)
end
这一行抛出wrong number of arguments (2 for 1)。将线路分成几部分,似乎对.to 的调用正在引发错误:
a = allow(Slack)
b = receive(:channels_join)
c = b.and_return(true)
a.to(c)
将参数更改为 .to 并没有改变任何东西:
a.to(c, c)
抛出同样的2 for 1 错误。
a.to(5)
抛出一个合理的错误:only the receive or receive_messages matchers are supported with allow(...).to, but you have provided: 5
为什么会抛出2 for 1 错误?
【问题讨论】:
-
您是否尝试过对
Slack类的任何实例存根,即allow_any_instance_of(Slack).to receive(:channels_join).and_return(true) -
原来
allow_any_instance_of(Slack::Client)和expect_any_instance_of(Slack::Client解决了这个问题。如果您想将其发布为答案,我会接受它 -
很高兴它工作了.. :)
-
我建议你不要使用
allow_any_instance_of。它有很多问题。我们建议不要使用它:relishapp.com/rspec/rspec-mocks/v/3-3/docs/… 相反,请参阅下面我建议的修复。
标签: ruby-on-rails ruby rspec mocking