2016-09-06 75 views
0

我努力学习rspec的和已经遇到了一个问题,我想测试我的车型之一的唯一性验证,但测试不停地进行故障即使我敢肯定它应该通过。测试验证的唯一

这里是我的测试:

context "two products with the same title" do 
    Given{FactoryGirl.build(:product, title: "Hello test title")} 
    Given(:post2){FactoryGirl.build(:product, title: "Hello test title")} 
    Then{post2.invalid?} 
    end 

,这里是我的验证:

validates :title, uniqueness: true 

但是当我运行测试它回来失败,我不知道为什么?

任何帮助将是巨大的!

+0

哪里是唯一的验证?您只是验证标题的最小长度。 –

回答

1

您需要添加的唯一性验证的title

validates :title, uniqueness: true 

,你也必须create第一product不仅仅是build

context "two products with the same title" do 
    Given{FactoryGirl.create(:product, title: "Hello test title")} 
    Given(:post2){FactoryGirl.build(:product, title: "Hello test title")} 
    Then{post2.invalid?} 
end 

这将创建一个产品,title = "Hello test title"

与第二个产品相同title产品将invalid

+0

抱歉,我有“验证:标题,独特性:真实的”我只抄错行 – user2320239

+0

还是你需要改变 –

+0

你需要创建的,而不是打造的第一款产品 –

0

您应该使用像早该-的匹配宝石测试这样的测试:https://github.com/thoughtbot/shoulda-matchers 它将为您节省大量的时间,它会干你的测试(因为它们都是相同的)

关于你的测试,我不知道什么是你想要的目的。你没有验证唯一性,只有产品的长度。对于添加独特您添加到您的产品型号:

validates :title, uniqueness: true 

,使测试时,你应该创建(而不是构建)你的第一个产品。基本上,除非您的产品存储在数据库中,否则您的产品将是有效的,因为它不存在(但是)任何其他产品。

+0

抱歉,我确实有只会验证:标题,独特性:真实,我只是抄错行 – user2320239

+0

常见错误;)我仍然强烈建议你使用宝石 – hcarreras