我现在正在使用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/

10-13 02:14