>我有以下规范:
it 'should find and associate thumbnail and video for article with an episode with the first alpha-numerically matching files it finds' do
@article = FactoryGirl.create(:pending_assets_article, id: 1)
@episode1 = FactoryGirl.create(:episode, topic_id: @topic.id, article_id: @article.id, position: 1)
@article.video.should be_nil
@article.thumbnail.image.should be_blank
@article.state.should == 'pending assets'
run_rake_task
Delayed::Job.count.should == 2
...
end
奇怪的是,这个规范在 Ubuntu 中传递得很好,但在 Mac OS X Lion 中它失败了,说expected 2, got 0
.
什么给??
我很乐意添加更多周围的代码以提供更多上下文。
你如何调用耙子任务? 如果要转到另一个进程,则可能会遇到数据存储中的事务边界。
理想情况下,您应该在 rspec 上下文中获取/执行 rake 任务:
require 'rake'
Rake::Task[name].invoke
例如,如果您将 postgres 作为 DelayedJob 队列的后端运行,并在 rspec 中使用数据的事务回滚,那么您在一个事务中具有测试数据进行测试设置,请向 rake 任务(更改事务外部的数据)进行筛选任务,返回到测试和原始事务,并且无法"看到"数据。
此外,与查询数据存储中的队列大小相比,使用 Mock 和期望验证代码是否正在对 DelayedJob 中的作业进行排队可能更简单。