繁体   English   中英

从RSpec访问父类函数以获取控制器

[英]Access parent class function from RSpec for controller

我正在尝试为API编写RSpec测试。

设置:为了保持一致,我们有一个格式化函数,该函数接受响应并生成一个漂亮的JSON对象,从而使所有内容保持一致。 例如,此示例已简化:

def format (status, message)
  {status: status,
   message: message}
end

该函数在所有API控制器都继承自的基本控制器中声明。

我想要的是:当我测试API控制器时,我想测试该控制器是否为我提供了预期的结果,但是我不想测试JSON响应的实际格式。 与之类似,我想检查传递给format函数的参数是否符合我的期望,但是我不想检查该函数实际返回的内容。 (我计划在另一个测试中测试该功能。如果对JSON格式的更改不会影响API的每个测试,我真的很喜欢它。如果不是一种好的做法,请随时告诉我。 )

我的问题:我有什么方法可以从当前API规范文件中的基本控制器访问该格式功能? 还是我有一个很好的方法将其存根并访问传递给它的参数,以便我可以检查它们是否正确?

相关: 如何使用RSpec检查JSON响应?

听起来您正在尝试在控制器规格中执行以下操作:

let(:status) { function1(params_hash) }
let(:message { function2(params_hash) }
it "does something something" do
  model.should_receive(:format).with(status, message)
  get :action, params_hash
 end

定义如何根据params_hash计算状态和消息由您决定。 我要做的是思考各种路径,并为每个路径编写一个测试。 如:

context "when id is missing in the params" do
 let(:status) { 404 }
 let(:message) { "Not found" }
 let(:params_hash) { {:id => nil} }

context "when id is correct" do
  let(:status) { 200 }
  let(:message) { "OK" }
  let(:params{hash) { {:id => 1 } }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM