Ruby on rails 从控制器的RSpec访问父类函数

Ruby on rails 从控制器的RSpec访问父类函数,ruby-on-rails,rspec,Ruby On Rails,Rspec,我正在尝试为API编写RSpec测试 设置: 为了保持一致性,我们有一个格式化函数,它接受响应并生成一个漂亮的JSON对象,因此所有内容都是一致的。例如,本例简化了: def format (status, message) {status: status, message: message} end 此函数在所有API控制器继承自的基本控制器中声明 我想要什么: 当我测试一个API控制器时,我想测试控制器是否给出了预期的结果,但我不想测试JSON响应的实际格式。如中所示,我想检查传

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

设置: 为了保持一致性,我们有一个格式化函数,它接受响应并生成一个漂亮的JSON对象,因此所有内容都是一致的。例如,本例简化了:

def format (status, message)
  {status: status,
   message: message}
end
此函数在所有API控制器继承自的基本控制器中声明

我想要什么: 当我测试一个API控制器时,我想测试控制器是否给出了预期的结果,但我不想测试JSON响应的实际格式。如中所示,我想检查传递给format函数的参数是否符合我的预期,但我不想检查该函数实际返回的内容。(我计划在另一个测试中测试该函数。如果JSON格式的更改不会影响API的每个测试,我真的希望如此。如果这不是一个好做法,请随时告诉我。)

我的问题: 我有没有办法从当前API规范文件中的基本控制器访问该格式化函数?或者有没有一个好办法让我把它删掉,然后访问传递给它的参数,这样我就可以检查它们是否正确


相关:

听起来您正试图在控制器规范中执行类似操作:

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
定义如何从参数散列计算状态和消息取决于您。我所做的是思考各种路径,并为每一条路径编写一个测试。例如:

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 } }