首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在Dashing中测试作业

在Dashing中测试作业
EN

Stack Overflow用户
提问于 2018-06-09 01:59:41
回答 1查看 102关注 0票数 0

我现在正在使用test /Smashing构建一个应用程序,并且我正在使用rspec来测试我的代码。但是,我不知道如何检查send_event是否被调用。我试过了

expect(Sinatra::Application).to receive(:send_event).twice

expect(Dashing).to receive(:send_event).twice

但这两种方法都没有奏效。我不确定哪个对象应该接收对send_event的调用,因为它位于app.rb中的Dashing中。在时髦的GitHub上,也有this issue在谈论同样的事情,但没有得到回复。

任何关于如何做到这一点的建议都将不胜感激。谢谢!

更新:

我仍然不知道如何做到这一点,但我发现这是有效的:

代码语言:javascript
复制
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(...),那么它无法识别该方法已被调用。这一定与我的测试没有使用虚拟类有关。我不知道是否有任何方法可以绕过这个问题,让它使用虚拟类。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-09 03:27:17

我想通了!

不要在作业中直接调用send_event。在其他类中调用它,可能名为EventSender。然后,要测试是否调用了send_event,请将其视为该类的实例方法,而不是模块的方法。您的代码可能如下所示,例如:

代码语言:javascript
复制
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

希望这对正在与同样的事情作斗争的人有所帮助。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50766147

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档