我有一个相对简单的工作人员,他使用excon从互联网上抢走一些东西。我正在努力成为一名优秀的测试人员,并使用Webmock强制对Internet交互进行存根,以便实际上我在测试基于各种存根交互的代码应执行的操作。
我注意到RSpec不能捕获在worker内部发生的故障。我不确定这可能是我的代码,也可能是错误。
这是一个简单的工作程序示例(是的,我知道抢救异常是不好的,接下来我会解决这个问题):
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
我不确定我在做什么错。我希望Sidekiq perform
未能冒充RSpec成为失败的事实,但事实并非如此。
- 我无法正确捕获此错误吗?
- 我应该检查有关工作状态的信息,而不是期望RSpec在工作人员中捕获此错误吗?
- 我应该完全做其他事情吗?
谢谢!