期望raise_error和测试失败,因为它引发了这个错误

时间:2013-06-20 11:43:30

标签: ruby-on-rails-3 rspec

我有简单的测试用例:

it "is removed when associated board is deleted" do
  link = FactoryGirl.create(:link)
  link.board.destroy
  expect(Link.find(link.id)).to raise_error ActiveRecord::RecordNotFound
end

它输出失败了:

1) Link is removed when associated board is deleted
   Failure/Error: expect(Link.find(link.id)).to raise_error ActiveRecord::RecordNotFound
   ActiveRecord::RecordNotFound:
     Couldn't find Link with id=1
   # ./spec/models/link_spec.rb:47:in `block (2 levels) in <top (required)>'

知道为什么吗?

1 个答案:

答案 0 :(得分:25)

要捕获错误,您需要将代码包装在一个块中。您的代码在不期望错误的范围内执行Link.find(link.id)。适当的测试:

it "is removed when associated board is deleted" do
  link = FactoryGirl.create(:link)
  link.board.destroy
  expect { Link.find(link.id) }.to raise_error ActiveRecord::RecordNotFound
end