我现在正在使用Dashing / Smashing构建一个应用程序,并且正在使用rspec测试我的代码。但是,我不知道如何检查send_event
是否被调用。我试过了expect(Sinatra::Application).to receive(:send_event).twice
和expect(Dashing).to receive(:send_event).twice
,
但都没有奏效。我不确定哪个对象应该接收对send_event
的调用,因为它位于app.rb
中的Dashing中。在Dashing GitHub上还没有答案的this issue谈论同一件事。
任何有关如何执行此操作的建议将不胜感激。谢谢!
更新:
我仍然不知道如何做到这一点,但是我发现这可行:
let(:dummy_class) { Class.new { include Dashing } }
context 'something' do
it 'does something' do
expect(dummy_class).to receive(:send_event).once
dummy_class.send('send_event', 'test', current: 'test')
end
end
但是,如果我要调用的方法包含
send_event
而不是dummy_class.send(...)
,则它无法识别该方法已被调用。它必须与不使用哑类的测试有关。我不知道是否有任何办法可以解决这个问题,并使其使用哑类。 最佳答案
我想到了!
不要直接在作业中调用send_event
。在其他类(可能称为EventSender
)中调用它。然后,要测试是否调用了send_event
,请将其视为该类的实例方法而不是模块的方法。您的代码可能看起来像这样,例如:
describe 'something' do
context 'something' do
it 'does something' do
happy_es = EventSender.new(...)
expect(happy_es).to receive(:send_event).with(...)
happy_es.method_that_calls_sendevent
end
end
end
希望这可以帮助在同一件事上苦苦挣扎的人。 :)
关于ruby - 在Dashing中测试作业,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/50766147/