在RSpec请求规范中对控制器操作进行存根

时间:2012-05-24 18:34:13

标签: ruby-on-rails ruby rspec

我正在为服务器错误编写API测试用例。我想存根控制器操作以引发错误以模拟服务器错误(500)。 在请求规范中,未设置controller变量。

it "Should return 500 upon server error" do
  controller.stub(:index).and_raise(ArgumentError) 
  get "/users.json"
  response.code.should eq("500")
end

2 个答案:

答案 0 :(得分:4)

我最终使用any_instance来删除控制器方法。

it "Should return 500 upon server error" do
  UsersController.any_instance.stub(:index).and_raise(ArgumentError)
  get "/users.json"
  response.code.should eq("500")
  response.body.should have_json_path("error")
end

注意:

在请求规范中存储控制器方法没有意义。但是......在这种情况下,我使用请求规范套件作为验收标准。其中一个要求是确保所有错误代码和消息都与API设计相匹配。我能够诱使服务器引发API设计中指定的所有HTTP错误代码。只有边缘案例是internal server error(i.e. 500)。我无法诱使控制器引发此错误。因为,我正在测试错误回复,因为这个回复独立于异常的位置和来源,所以我决定将其存根。

答案 1 :(得分:0)

它实际上是一个实例变量:@controller