使用RSpec测试DeserializationError

时间:2017-02-09 22:42:56

标签: ruby-on-rails ruby rspec

我有一个入队的工作。有时,在作业运行之前,与该作业关联的记录将被销毁。

要解决在作业执行期间引发的任何ActiveJob::DeserializationError,我已将以下内容添加到作业中:

rescue_from(ActiveJob::DeserializationError) do |exception|
  exception.original_exception == ActiveRecord::RecordNotFound
end

我想包含测试,以便我可以验证当作业运行时已经销毁的记录不会引发ActiveJob::DeserializationError

首先进行测试,我删除了上面的函数并决定确保我可以测试ActiveJob::DeserializationError实际上是否被抛出。这个规范是:

it "raises DeserializationError when a record is destroyed before perform" do
  record = create(:record)

  record.destroy

  expect{ RecordDeletionJob.perform_later(record) }.to raise_error(ActiveJob::DeserializationError)
end

令我惊讶的是,规范失败了,因为没有提出任何问题。这是不正确的。如果没有rescue_from方法,则应该提出ActiveJob::DeserializationError

我认为问题是记录没有被重新加载但我不知道如何在破坏后重新加载记录以及如何在此之后测试ActiveJob::DeserializationError

如果在作业运行时记录不存在的情况下,如何测试ActiveJob::DeserializationError不会被抛出?

0 个答案:

没有答案