Rspec before (: each) работает, но before (: all) не работает - PullRequest
0 голосов
/ 18 декабря 2018

Моя категория продукта: -

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

Спецификация работает нормально, но когда я использую до (: все) вместо до (: каждый), второй пример завершается неудачей -
expected false got true Iзнаю разницу между before (: all) и before (: each), но я не могу найти точную причину, по которой второй пример терпит неудачу с before (: all)

1 Ответ

0 голосов
/ 18 декабря 2018

before :all запускается только один раз перед всеми примерами, поэтому @product_category создается один раз.Если после каждого теста вы выполняете что-то вроде усечения DatabaseCleaner, запись больше не находится в базе данных во втором тесте, поэтому проходит проверку.

before :each, с другой стороны, будет запускаться перед каждым примером, поэтому запись будет во втором примере, даже если за это время база данных была очищена.

...