我正在阅读rails指南,我已经完成了一些测试(124)。
我开始遇到一个问题,有时一组测试会随机失败,但是当我尝试使用相同的种子重现它们时,它们会通过。失败似乎主要与用于生成唯一用户电子邮件的FactoryGirl序列有关。大多数时候测试都通过了,如果我没有提供种子,那么这些失败弹出可能是10%的时间。
以下是我所看到的一个例子:
这是似乎有时失败的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
答案 0 :(得分:1)
也许之前的测试正在设置这些用户。尝试在创建过滤器之前将User.delete_all放在过滤器中。