来自RSpec的意外结果改变了`destroy`对象

时间:2015-08-31 19:41:23

标签: ruby-on-rails ruby rspec factory-bot

我试图在我的模型上测试destroy

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

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

但它失败了。任何人都可以指出我做错了吗?

1 个答案:

答案 0 :(得分:8)

懒惰地评估subject块。这意味着产品在首次使用时创建。没有任何变化,因为你在预期中第一次调用product并立即销毁该记录。

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

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