特殊问题:简单的Rspec规范在Linux上通过,但在Mac OS X上不通过



>我有以下规范:

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 中的作业进行排队可能更简单。

相关内容

最新更新