use*_*483 4 rspec ruby-on-rails ruby-on-rails-4 ruby-on-rails-5
这是我的代码的一个小描述(简化)
应用程序/工作/
class GenerateInvoiceJob < ActiveJob::Base
queue_as :default
def perform()
Invoice.create
end
end
Run Code Online (Sandbox Code Playgroud)
应用程序/模型/
class Product < ActiveRecord::Base
def buy
GenerateInvoiceJob.perform_later
end
end
Run Code Online (Sandbox Code Playgroud)
规格/工作
RSpec.describe AnotherJob, type: :job do
context "with filter" do
...
end
end
Run Code Online (Sandbox Code Playgroud)
规格/型号
RSpec.describe Product, type: :model do
describe '#buy' do
it "should generate invoice" do
Product.create().buy
expect(Invoice.all.size).to eq 1
end
end
end
Run Code Online (Sandbox Code Playgroud)
带导轨 4.2.11
当我跑步时
rspec 规格/模型/product_spec.rb
然后测试就可以了(工作已执行)
当我跑步时
rspec spec -e '应生成发票'
然后测试失败,导致作业未执行
如果我从规范/作业中删除所有测试作业然后运行
rspec spec -e '应生成发票'
然后测试就可以了(工作已执行)
我不明白为什么对某些工作进行测试会阻止其他工作的执行?有解决办法吗?
带导轨 5 和导轨 6
无论我做什么,测试总是失败,因为工作从未执行?
自 Rails 5 以来,测试期间不再执行作业吗?
感谢帮助
第一个答案后更新 1:
非常感谢您的回答,只是为了确保我做得正确:
我在environment/test.rb中添加了 config.active_job.queue_adapter = :test
在我的spec/models/product_spec.rb中
class GenerateInvoiceJob < ActiveJob::Base
queue_as :default
def perform()
Invoice.create
end
end
Run Code Online (Sandbox Code Playgroud)
不确定我放了
ActiveJob::Base.queue_adapter.perform_enqueued_jobs = true
Run Code Online (Sandbox Code Playgroud)
在好地方?!
您需要设置:
ActiveJob::Base.queue_adapter.perform_enqueued_jobs = true
Run Code Online (Sandbox Code Playgroud)
然而,使用have_enqueued_job
是更常见的方法。
编辑:还有一种更简单的方法让我忘记了:
ActiveJob::Base.queue_adapter = :inline
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2193 次 |
最近记录: |