23t*_*tux 4 ruby rspec ruby-on-rails minitest
升级到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
Run Code Online (Sandbox Code Playgroud)
此规范因错误而失败
expected MyJob::MyError, got #<Minitest::UnexpectedError: Unexpected exception> with backtrace:
Run Code Online (Sandbox Code Playgroud)
仔细观察抛出的错误,它看起来像这样:
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'
Run Code Online (Sandbox Code Playgroud)
似乎错误以某种方式被包裹起来Minitest::UnexpectedError,但原始的底层错误仍然存在。
知道如何解决这个问题吗?
这些更改是在 Rails 6.1 中进行的perform_enqueued_jobs
因此,要修复您的测试,您需要重写它,如下所示:
describe MyJob do
it "throws an error" do
expect do
described_class.perform_later
perform_enqueued_jobs
end.to raise_error(described_class::MyError)
end
end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
624 次 |
| 最近记录: |