我有Rails 4应用程序TravelNotes。旅行笔记有三种状态:草稿,已发布,已存档。 如果状态是草稿,那么它可以被删除,否则不可以。ActiveRecord :: RecordNotDestroyed的RSpec匹配器
在TravelNote - 型号:
before_destroy :check_for_draft
def check_for_draft
if status == 'draft'
delete
else
errors.add(:scope, 'Only drafts can be deleted')
return false
end
end
我用RSpec的测试:
it "should delete a travel note if its status is draft" do
expect{ draft.destroy! }.to change{ TravelNote.count }.by(-1)
end
it "should not delete a travel note if its status is published or archived" do
expect{ published.destroy! }.to_not change{ TravelNote.count }
当我运行测试草案,删除,测试通过,但已发布,删除测试我得到:
Failures:
1) TravelNote delete should not delete a travel note if its status is published or archived
Failure/Error: expect{ published.destroy! }.to_not change{ TravelNote.count }
ActiveRecord::RecordNotDestroyed:
ActiveRecord::RecordNotDestroyed
很明显,代码工作,只有旅行笔记与其他状态比草稿可以被删除。
我该如何将故障消息ActiveRecord :: RecordNotDestroyed变为绿色?
谢谢菲利普,你的方法正在工作。但是在消除了爆炸之后!测试也通过了。我不确定这是否是rspec方式来检查,但我坚持“不改变”。 – StandardNerd 2014-10-16 16:52:44