Ruby 在Dashing中测试作业
我现在正在用dash/Smashing构建一个应用程序,我正在使用rspec测试我的代码。但是,我不知道如何检查是否调用了Ruby 在Dashing中测试作业,ruby,testing,rspec,jobs,dashing,Ruby,Testing,Rspec,Jobs,Dashing,我现在正在用dash/Smashing构建一个应用程序,我正在使用rspec测试我的代码。但是,我不知道如何检查是否调用了send\u事件。我试过了 expect(Sinatra::Application)。接收(:发送事件)。两次 及 expect(破折号)。接收(:发送事件)。两次 但两者都不起作用。我不确定应该由哪个对象接收对send\u event的调用,因为它位于app.rb中的短划线中。同样,在风靡全球的GitHub上,也有人在谈论同样的事情,但无人回答 任何关于如何做到这一点的建议
send\u事件。我试过了
expect(Sinatra::Application)。接收(:发送事件)。两次
及
expect(破折号)。接收(:发送事件)。两次
但两者都不起作用。我不确定应该由哪个对象接收对send\u event
的调用,因为它位于app.rb
中的短划线中。同样,在风靡全球的GitHub上,也有人在谈论同样的事情,但无人回答
任何关于如何做到这一点的建议都将不胜感激。谢谢大家!
更新:
我仍然没有弄明白如何做到这一点,但我发现这是可行的:
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\u event
的要调用的方法,而不是执行dummy\u class.send(…)
,则它无法识别调用了该方法。这一定与我的测试没有使用虚拟类有关。我不知道是否有办法绕过这个问题,让它使用虚拟类。我想出来了
不要直接在作业中调用send\u事件
。在其他类中调用它,可能称为EventSender
。然后,要测试调用了send\u 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
希望这能帮助那些正在为同样的事情挣扎的人。:)