Ruby 在Dashing中测试作业

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上,也有人在谈论同样的事情,但无人回答 任何关于如何做到这一点的建议

我现在正在用dash/Smashing构建一个应用程序,我正在使用rspec测试我的代码。但是,我不知道如何检查是否调用了
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
希望这能帮助那些正在为同样的事情挣扎的人。:)