在 Dashing 中测试工作
Testing a job in Dashing
我现在正在使用 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 中。还有this issue,也在讨论同样的事情,在DashingGitHub上没有回答。
任何有关如何执行此操作的建议将不胜感激。谢谢!
更新:
我仍然不知道该怎么做,但我发现这行得通:
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(...)
,那么它不会识别调用了该方法。这一定与我的测试没有使用虚拟 class 有关。我不知道是否有任何方法可以解决这个问题并让它使用虚拟 class.
我想通了!
不要在作业中直接调用 send_event
。在其他 class 中调用它,也许称为 EventSender
。然后,为了测试 send_event
是否被调用,将其视为 class 的实例方法而不是模块的方法。您的代码可能如下所示,例如:
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
希望这对正在为同样的事情苦苦挣扎的人有所帮助。 :)
我现在正在使用 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 中。还有this issue,也在讨论同样的事情,在DashingGitHub上没有回答。
任何有关如何执行此操作的建议将不胜感激。谢谢!
更新:
我仍然不知道该怎么做,但我发现这行得通:
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(...)
,那么它不会识别调用了该方法。这一定与我的测试没有使用虚拟 class 有关。我不知道是否有任何方法可以解决这个问题并让它使用虚拟 class.
我想通了!
不要在作业中直接调用 send_event
。在其他 class 中调用它,也许称为 EventSender
。然后,为了测试 send_event
是否被调用,将其视为 class 的实例方法而不是模块的方法。您的代码可能如下所示,例如:
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
希望这对正在为同样的事情苦苦挣扎的人有所帮助。 :)