我正在尝试在rails应用程序中测试我的Smser类,并尝试仅使用mocha来存根实际的发送方法。我还要提一下,这是我第一次尝试嘲弄/抄袭。
当运行测试时,我得到了失败unexpected invocation: :remove_method
- 看起来像我的对象上调用的mocha,用于存根方法。所以我不知道该怎么做。
以下是相关的代码段:
Smser class
# models/smser.rb
class Smser
...<truncated>...
def self.instance
@@instance ||= self.new
end
private
# Need to stub this
def twilio(args)
@client.account.messages.create args
end
end
测试
# test/models/smser.rb
test "should send sms" do
Smser.instance.stubs(:twilio).with(from: '123', to: '234', body: 'Message body')
# <- ... here we run something that should invoke 'twilio' on the Smser object
end
测试输出
unexpected invocation:
#<Smser:0x68e4940>.twilio(:from => '123', :to => :remove_method, :body => :twilio)
satisfied expectations:
- allowed any number of times, invoked once:
#<Smser:0x68e4940>.twilio(:from => '123', :to => '234', :body => 'Message body')
感谢任何帮助。
答案 0 :(得分:1)
错误实际上意味着Mocha期望在twilio
类上调用Smser
方法。
而不是:
Smser.instance.stubs(:twilio).with(from: '123', to: '234', body: 'Message body')
它应该是:
Smser.instance.stubs(:twilio).with(from: '123', to: '234', body: :twilio)
因为,正如错误所述,身体不是&#34;消息体&#34;但是:twilio
。
HTH