我有一个相对简单的工人,它使用 Excon 从互联网上抓取一些东西。我正在努力成为一名优秀的测试人员并使用 Webmock 来强制对 Internet 交互进行存根,这样我实际上是在根据各种存根交互测试代码应该做什么。
我注意到 RSpec 没有捕捉到工作人员内部发生的故障。这可能是我的代码,它可能是一个错误,我不确定。
这是一个简单的工人示例(是的,我知道救援异常很糟糕,接下来我会修复它):
include Sidekiq::Worker
sidekiq_options queue: 'fetch_article_content', retry: true, backtrace: true
def perform(url)
begin
Excon.get(url)
rescue Exception => e
Rails.logger.warn("error: #{e}")
nil
end
end
end
这是一个简化的 RSpec 测试:
Sidekiq::Testing.inline!
work = FetchArticleContentWorker.new
work.perform("http://google.com")
启用 Webmock 后,这会导致 Excon 失败(见 test.log 文件):
error: Real HTTP connections are disabled. Unregistered request: ...
但是,RSpec 认为这很好用:
.
Finished in 0.44487 seconds (files took 5.35 seconds to load)
1 example, 0 failures
我不确定我在这里做错了什么。我预计 Sidekiqperform
未能将 RSpec 视为失败,但事实并非如此。
- 我没有正确捕捉到这个错误吗?
- 我是否应该检查有关工作状态的某些内容,而不是期望 RSpec 在工作人员中捕获此错误?
- 我应该完全做其他事情吗?
谢谢!