【问题标题】:RSpec POST changes the URLRSpec POST 更改 URL
【发布时间】:2011-12-05 21:42:58
【问题描述】:

Rails 3,RSpec 2:

在我对控制器的 rspec 测试中,我使用 post 并传入一些参数:

it "returns a job id" do
  post :new, { :a => 'b'}
  response.status.should == 200
end

这工作正常,在控制器params[:a] is 'b'

但是,控制器端的request.urlhttp://localhost/controller?a=b

我不想在 URL 中包含参数,因为在真实场景(外部测试)中,URL 是安全签名的一部分。

我的问题是为什么 rspec post 将参数添加到 URL,而不是像浏览器(或 CURL)中的 POST 一样表现?

【问题讨论】:

    标签: ruby-on-rails ruby-on-rails-3 rspec rspec2


    【解决方案1】:

    我还没有找到解决这个问题的方法,但这是我设法解决问题的方法,因此我的单元测试工作:我在运行单元测试时简单地绕过签名检查。代码如下:

    def check_signature
      return if request.host == 'test.host'
    
      # check signature
      # ...
    end
    

    【讨论】:

      【解决方案2】:

      我知道这有点老了,但我觉得奇怪的是你使用 post 来执行 :new 操作。通常 :new 显示一个表单,因此您将拥有 'get :new' 并在创建测试中使用 post, 'post :create, params = {blah: blah}'。

      检查您的路线以查看您的 :new 操作是发布还是获取。

      【讨论】:

      • 我同意你的观点。问题中的代码是一个示例。问题是真的!
      猜你喜欢
      • 2010-10-04
      • 1970-01-01
      • 1970-01-01
      • 2012-12-15
      • 1970-01-01
      • 2013-04-29
      • 2015-06-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多