如何测试某个动作是否引发ActionController::ParameterMissing异常?

例如:

it "raises an exception" do
  post :create, {}
  expect(response).to raise ActionController::ParameterMissing
end


上面的方法似乎不起作用,它将通过ActionController::ParameterMissing异常使测试失败。

最佳答案

使用raise_error匹配器使用Expect块语法:

it "raises an exception" do
  expect{ post(:create, {}) }.to raise_error ActionController::ParameterMissing
end


您的代码不起作用的原因是post(:create, {})引发了异常。这发生在expect(response).to ...代码执行之前。由于#post消息不在begin...end块中,因此引发的异常将传递给未通过测试的RSpec。

10-01 06:22