0

我有以下规格:

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.

是什么赋予了??

我很乐意添加更多周边代码以提供更多上下文。

4

1 回答 1

0

你是如何调用 rake 任务的?如果您要使用另一个进程,您可能会遇到数据存储中的事务边界。

理想情况下,您应该在 rspec 上下文中获取/执行 rake 任务:

require 'rake'
Rake::Task[name].invoke

例如,如果您将 postgres 作为 DelayedJob 队列的后端运行,并在 rspec 中使用数据的事务回滚,则您在一个事务中拥有测试数据以进行测试设置,然后转至 rake 任务,该任务会更改事务之外的数据,返回测试和原始交易,并不能“看到”数据。

此外,与查询数据存储中队列的大小相比,使用 Mock 和期望验证您的代码是否将作业排入 DelayedJob 可能更简单。

于 2012-09-19T18:58:04.240 回答