【发布时间】:2019-01-02 19:26:33
【问题描述】:
我有一个通过 capybara 运行的集成测试。它访问网页、创建对象并呈现结果。创建对象时,控制器会将创建一些相关对象的多个作业排入队列。
当我运行集成测试时,我希望能够检查呈现的页面,就好像这些作业已经完成一样。两个明显的解决方案是:
- 将队列适配器设置为 :inline
- 在创建对象后手动执行/清除排队的作业。
对于 1),我尝试将 before(:each) 中的队列适配器设置为 :inline,但这不会更改适配器,它会继续使用测试适配器(在我的 test.rb 配置中设置文件):
before(:each) { ActiveJob::Base.queue_adapter = :inline }
after(:each) { ActiveJob::Base.queue_adapter = :test }
it "should work" do
puts ActiveJob::Base.queue_adapter
end
哪个输出:#<ActiveJob::QueueAdapters::TestAdapter:0x007f93a1061ee0 @enqueued_jobs=[], @performed_jobs=[]>
对于 2),我不确定这是否真的可行。 ActiveJob::TestHelpers 提供了 perform_enqueued_jobs,但这种方法没有帮助,因为它似乎只适用于传入块中明确引用的作业。
【问题讨论】:
标签: ruby-on-rails-5 capybara rails-activejob