我如何调试看似与时序相关的rspec测试失败?

时间:2014-03-02 15:52:21

标签: ruby-on-rails ruby rspec

我正在阅读rails指南,我已经完成了一些测试(124)。

我开始遇到一个问题,有时一组测试会随机失败,但是当我尝试使用相同的种子重现它们时,它们会通过。失败似乎主要与用于生成唯一用户电子邮件的FactoryGirl序列有关。大多数时候测试都通过了,如果我没有提供种子,那么这些失败弹出可能是10%的时间。

以下是我所看到的一个例子:

enter image description here

这是似乎有时失败的rspec测试代码

describe "pagination" do

      before(:all) { 30.times { FactoryGirl.create(:user) } }
      after(:all)  { User.delete_all }

      it { should have_selector('div.pagination') }

      it "should list each user" do
        User.paginate(page: 1).each do |user|
          page.should have_selector('li', text: user.name)
        end
      end
    end

这是工厂:

FactoryGirl.define do
  factory :user do
    sequence(:name)  { |n| "Person #{n}" }
    sequence(:email) { |n| "person_#{n}@example.com"}
    password "foobar"
    password_confirmation "foobar"

    factory :admin do
      admin true
    end
  end
  factory :micropost do
    content "Lorem ipsum"
    user
  end
end

更新 该问题与测试数据库在某些测试后未被清理有关。我可以(并且确实)找到创建用户的测试。 我决定使用database_cleaner gem并按照此处的建议进行配置: configuring database_cleaner

1 个答案:

答案 0 :(得分:1)

也许之前的测试正在设置这些用户。尝试在创建过滤器之前将User.delete_all放在过滤器中。