作业规格包装错误与Minitest :: Rails 6.1升级后的InfirantError
升级到Rails 6.1后,打破了测试:
class MyJob < ActiveJob::Base
class MyError < StandardError; end
def perform
raise MyError
end
end
describe MyJob, type: :job do
it "throws an error" do
expect do
perform_enqueued_jobs { MyJob.perform_later }
end.to raise_error(described_class::MyError)
end
end
失败,错误
expected MyJob::MyError, got #<Minitest::UnexpectedError: Unexpected exception> with backtrace:
该规范在近距离抛出的错误时
69:
70: describe MyJob, type: :job do
71: it "throws an error" do
72: expect do
73: binding.pry
=> 74: perform_enqueued_jobs { MyJob.perform_later }
75: end.to raise_error(described_class::MyError)
76: end
77: end
[1] pry(#<RSpec::ExampleGroups::MyJob>)> perform_enqueued_jobs { MyJob.perform_later }
Minitest::UnexpectedError: MyJob::MyError: MyJob::MyError
/usr/src/app/spec/lib/my_job_spec.rb:5:in `perform'
/usr/local/bundle/gems/activejob-6.1.6/lib/active_job/execution.rb:48:in `block in perform_now'
/usr/local/bundle/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
/usr/local/bundle/gems/airbrake-13.0.0/lib/airbrake/rails/active_job.rb:22:in `block in perform'
/usr/local/bundle/gems/airbrake-ruby-6.1.0/lib/airbrake-ruby/benchmark.rb:13:in `measure'
/usr/local/bundle/gems/airbrake-13.0.0/lib/airbrake/rails/active_job.rb:21:in `perform'
/usr/local/bundle/gems/airbrake-13.0.0/lib/airbrake/rails/active_job.rb:45:in `block (2 levels) in <module:ActiveJob>'
/usr/local/bundle/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:126:in `instance_exec'
/usr/local/bundle/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:126:in `block in run_callbacks'
,看起来像这样:似乎错误是用minitest :: Infirate> firtesterror
包裹的错误。 ,但是原始的基础错误仍然存在。
知道如何解决这个问题?
After upgrading to Rails 6.1, a test is broken:
class MyJob < ActiveJob::Base
class MyError < StandardError; end
def perform
raise MyError
end
end
describe MyJob, type: :job do
it "throws an error" do
expect do
perform_enqueued_jobs { MyJob.perform_later }
end.to raise_error(described_class::MyError)
end
end
This spec fails with the error
expected MyJob::MyError, got #<Minitest::UnexpectedError: Unexpected exception> with backtrace:
When looking closer what error is thrown, it looks like this:
69:
70: describe MyJob, type: :job do
71: it "throws an error" do
72: expect do
73: binding.pry
=> 74: perform_enqueued_jobs { MyJob.perform_later }
75: end.to raise_error(described_class::MyError)
76: end
77: end
[1] pry(#<RSpec::ExampleGroups::MyJob>)> perform_enqueued_jobs { MyJob.perform_later }
Minitest::UnexpectedError: MyJob::MyError: MyJob::MyError
/usr/src/app/spec/lib/my_job_spec.rb:5:in `perform'
/usr/local/bundle/gems/activejob-6.1.6/lib/active_job/execution.rb:48:in `block in perform_now'
/usr/local/bundle/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:117:in `block in run_callbacks'
/usr/local/bundle/gems/airbrake-13.0.0/lib/airbrake/rails/active_job.rb:22:in `block in perform'
/usr/local/bundle/gems/airbrake-ruby-6.1.0/lib/airbrake-ruby/benchmark.rb:13:in `measure'
/usr/local/bundle/gems/airbrake-13.0.0/lib/airbrake/rails/active_job.rb:21:in `perform'
/usr/local/bundle/gems/airbrake-13.0.0/lib/airbrake/rails/active_job.rb:45:in `block (2 levels) in <module:ActiveJob>'
/usr/local/bundle/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:126:in `instance_exec'
/usr/local/bundle/gems/activesupport-6.1.6/lib/active_support/callbacks.rb:126:in `block in run_callbacks'
It seems like the error is somehow wrapped with Minitest::UnexpectedError
, but the original underlying error is still there.
Any idea how to fix this?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这些用
percorm_enqueed_jobs
以便修复您的测试需要像以下所示那样重写它:
These changes were made in Rails 6.1 with
perform_enqueued_jobs
So to fix your test you need to rewrite it like shown below: