Ruby on rails RSpec请求规范中的存根控制器操作

Ruby on rails RSpec请求规范中的存根控制器操作,ruby-on-rails,ruby,rspec,Ruby On Rails,Ruby,Rspec,我正在为服务器错误编写一个API测试用例。我想存根一个控制器动作,以引发一个错误来模拟服务器错误(500)。 在请求规范中,未设置控制器变量 it "Should return 500 upon server error" do controller.stub(:index).and_raise(ArgumentError) get "/users.json" response.code.should eq("500") end 它实际上是一个实例变量:@controller它实

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

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

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

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

我最后使用
任何实例
来存根控制器方法

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错误代码。唯一的边缘情况是
内部服务器错误(即500)
。我没有办法诱导控制器产生这个错误。因为,我正在测试错误回复,因为此回复与异常的位置和来源无关,所以我决定将其存根。

我最终使用
任何\u实例将控制器方法存根。

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错误代码。唯一的边缘情况是
内部服务器错误(即500)
。我没有办法诱导控制器产生这个错误。因为,我正在测试错误回复,并且由于此回复与异常的位置和来源无关,我决定将其存根。

控制器规范的请求规范?我认为@apheading是正确的,这对于控制器测试毫无意义。您正在截取您应该测试的整个方法。@aReading My API测试规范作为请求规范实现,几乎所有测试用例都是真正的请求规范。只有一种情况是混合的,因为我需要在服务器出错时检查错误代码。我需要存根,因为我无法触发服务器错误。是否有其他方法来测试这个(除了使用控制器规范)我看不到任何干净的解决方法,也看不到任何不拆分规范的理由。@a首先,我必须为一个测试用例维护一个额外的规范文件。(如果可能的话,我想避免)。控制器规范的请求规范?我认为@apreading是正确的,作为控制器测试没有任何意义。您正在截取您应该测试的整个方法。@aReading My API测试规范作为请求规范实现,几乎所有测试用例都是真正的请求规范。只有一种情况是混合的,因为我需要在服务器出错时检查错误代码。我需要存根,因为我无法触发服务器错误。是否有其他方法来测试这个(除了使用控制器规范)我看不到任何干净的解决方法,也看不到任何不拆分规范的理由。@a首先,我必须为一个测试用例维护一个额外的规范文件。(如果可能的话,我想避免它)。
@controller
在请求规范中的请求之前是nil。我会远离它的。很明显,我不得不听从你在这方面的专业知识<代码>@controller在请求规范中的请求之前为零。我会远离它的。很明显,我不得不听从你在这方面的专业知识!有了第一行
…any_instance.stub…
,您还需要第二行在
控制器
变量上再次stub吗?有了第一行
…any_instance.stub…
,您还需要第二行在
控制器
变量上再次stub吗???