我的ProductCategory规格:-
require 'rails_helper'
RSpec.describe ProductCategory, type: :model do
before(:each) do
@product_category = create(:product_category)
end
context "validations" do
it "should have valid factory" do
expect(@product_category).to be_valid
end
it "should have unique name" do
product_category_new = build(:product_category, name: @product_category.name)
expect(product_category_new.save).to be false
end
end
end
该规范运行良好,但是当我使用before(:all)而不是before(:each)时,第二个示例将失败-
expected false got true
我知道before(:all)和before(:each)之间的区别,但是我无法找到第二个示例使用before(:all)失败的确切原因
答案 0 :(得分:3)
before :all
仅在所有示例之前运行一次,因此@product_category
仅创建一次。如果在每次测试后都运行诸如DatabaseCleaner截断之类的操作,则该记录将不再在第二次测试的数据库中,从而通过了验证。
before :each
将在每个示例之前运行,因此即使在此期间数据库被清理,记录也将在第二个示例中存在。