2013-11-23 87 views
0

例如:Rspec的运行测试在验证错误的结果

我运行一个测试和所有断言通,但我再次运行测试,并在我的情况,我收到以下错误:

验证失败:电子邮件已被采取

它似乎增加:序列(:电子邮件){| n | “nobody #{n}@xyz.com”}对于女生来说毫无意义

测试似乎有时会通过,而其他测试似乎因错误原因而失败。

请告知问题/解决方案。

+1

您是在每次运行之前/之后清除测试数据库吗?如果你运行测试,然后手动运行'rake db:test:prepare',然后再次运行测试,它们通过还是失败? (通常这是由'database_cleaner'或事务性固定装置自动处理的,但某些东西可能配置不正确,或者您的数据库可能处于不良状态) – Grantovich

回答

0

尝试在运行测试用例之前删除表中的所有记录。

如: -

describe User do 
    before(:each) do 
    User.delete_all 
    end 

    it "validate e-mail" do 
    (do staff..) 
    end 
end 
0

我不确定这是一个明确的解决方案,但我使用懒惰属性添加随机数到我的产品参考的工厂,factorygirl。

例子:

FactoryGirl.define do 
    factory :product do 
    reference    {"AB"+rand(999).to_s} 
    description   "Test Product" 
    quantity    {(1..9999).to_a.sample} 
    price_per_unit   {((1..999999).to_a.sample)/100.to_f} 
    end 
end 
0

你任何 “之前(:所有)” 有块?也许你错过了相应的“after(:all)”来清理数据。之前(:each)充当事务,因此数据库得到清理,在(:all)像普通查询一样工作之前,您不得不在after(:all)块中处理清理。