[英]How to test dependent: :destroy with RSpec?
我想測試我的User
模型關聯has_many :projects, dependent: :destroy
現在已經走了這么遠:
it "destroys dependent projects" do
user = FactoryGirl.build(:user)
project = FactoryGirl.build(:project)
user.projects << project
user.destroy
expect(Project.count).to change(-1)
end
但這給出了一個錯誤:
Failure/Error: expect(Project.count).to change(-1)
ArgumentError:
`change` requires either an object and message (`change(obj, :msg)`) or a block (`change { }`). You passed an object but no message.
所以我認為change
不是正確的匹配器,是嗎? 你能告訴我如何編寫這個測試而不會出現那個錯誤嗎?
您還可以使用 shoulda 匹配器:
it { expect(user).to have_many(:projects).dependent(:destroy) }
這是正確的匹配器,但您沒有以正確的方式使用它:
正確的方法是
expect { user.destroy }.to change { Project.count }
這只是斷言數值變化,但沒有指定變化多少。 為此,將調用鏈接到by
:
expect { user.destroy }.to change { Project.count }.by(-1)
這應該有效:
expect { user.destroy }.to change { Project.count }.by(-1)
您應該測試是否刪除了實際項目。
expect(Project.all).not_to include project
這應該有效:
it { is_expected.to have_many(:projects).dependent(:destroy) }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.