Ruby on rails “销毁”对象上RSpec更改的非预期结果

Ruby on rails “销毁”对象上RSpec更改的非预期结果,ruby-on-rails,ruby,rspec,factory-bot,Ruby On Rails,Ruby,Rspec,Factory Bot,我试图在我的模型上测试销毁: subject(:product){ FactoryGirl.create(:product)} it "destroys product" do expect{product.destroy}.to change(Product,:count).by(-1) end 但它失败了。有人能指出我做错了什么吗?对主题块进行了惰性评估。这意味着产品是在首次使用时创建的。没有任何变化,因为您在预期中第一次调用产品,并立即销毁该记录 要解

我试图在我的模型上测试
销毁

   subject(:product){ FactoryGirl.create(:product)}

    it "destroys product" do
      expect{product.destroy}.to change(Product,:count).by(-1)
    end

但它失败了。有人能指出我做错了什么吗?

主题
块进行了惰性评估。这意味着产品是在首次使用时创建的。没有任何变化,因为您在预期中第一次调用
产品
,并立即销毁该记录

要解决此问题,请确保在预期之前创建记录:

subject(:product) { FactoryGirl.create(:product) }

before { product } # this line creates the product before running the test

it 'destroys product' do
  expect { product.destroy }.to change(Product, :count).by(-1)
end
或:

subject!(:product) { FactoryGirl.create(:product) } # note the '!'

it 'destroys product' do
  expect { product.destroy }.to change(Product, :count).by(-1)
end