在Rails Controller测试中,有没有办法传递动作参数?

时间:2015-09-23 14:54:18

标签: ruby-on-rails ruby testing

  

     

我知道,action是Rails中的保留字。我正在Rails服务器中为Yandex Money实现第三方API,Yandex API应用程序在我的Rails应用程序中发布action param。我知道如何得到它(How to not use Rails action parameter in controller)。问题是 - 如何对我的控制器进行写测试,因为我的测试无法发送action参数(参见下面的说明)。

我在Rails中编写控制器测试,我需要从测试中将action参数传递给控制器​​。这是我的控制者:

class YandexController < ApplicationController
  def notify
    render text: request.request_parameters
  end
end

使用curl命令发布数据时:

curl --data "action=paymentAviso&some_other_param=value" http://localhost:3000/yandex/notify

我得到了正确的结果:

{"action"=>"paymentAviso", "some_other_param"=>"value"}

但是,当我尝试在测试中发送action参数时,它无效。请参阅下面的测试:

class YandexControllerTest < ActionController::TestCase
  test "notify sucess" do
    post :notify, { action: 'paymentAviso', some_other_param: 'value' }
    assert_response :success
    puts response.body
  end
end

当我进行测试时,我看到:

  

运行:

     

{ “some_other_param”=&gt; “中值”}

有没有办法从测试中将action参数传递给我的控制器?

1 个答案:

答案 0 :(得分:2)

除非您指的是控制器的操作,否则不能在参数中使用actionaction参数是Rails用来确定在控制器中运行哪种方法的参数。因此,当您运行规范时,它只是在控制器中调用paymentAdviso

您应该更改参数名称,以便它不会干扰Rails&#39;约定。

有关其他保留Rails字词的列表,请查看此处:https://reservedwords.herokuapp.com/