0

我正在尝试为我的 API 编写请求规范,但需要传递 API 密钥。API 密钥作为标头传递。在我的网络中,我这样传递它:

Header: Authorization

Value: Token token="MyString"

在我的规范中,我正在尝试这个:

describe "sessions" do
  before do
    FactoryGirl.create(:api_key)
  end

  it "is authenticated with a token" do
    put "/api/v1/users/#{@user.id}?user_email=#{@user.email}&auth_token=#{@user.authenti‌​cation_token}", {user: {name: "New Name"}}, { 'HTTP_AUTHORIZATION' => "Token token=\"MyString\"" }
    response.status.should be(201)
  end
end

这不会引发异常,但它也不起作用。我的测试失败并出现错误代码401

4

2 回答 2

0

我相信标头哈希应该是第三个参数put(对于get,post等)。在您的示例中,您将其作为第二个。

从文档:

put(path, parameters = nil, headers_or_env = nil)

http://api.rubyonrails.org/classes/ActionDispatch/Integration/RequestHelpers.html#method-i-put

于 2013-10-17T23:24:00.273 回答
0

问题是一个简单的格式。我必须添加一些日志记录才能准确查看 Authorization 标头是如何发送的。我刚刚复制了该输出并用我的测试值替换了这些值,所以正确的答案是:

it "is authenticated with a token" do
        put "/api/v1/users/#{@user.id}?user_email=#{@user.email}&auth_token=#{@user.authentication_token}", {user: {name: "New Name"}}, { "HTTP_AUTHORIZATION"=>"Token token=\"#{@api_key.access_token}\"" }
        response.status.should be(201)
      end

我在添加日志记录时发现了另一个问题。我有一个之前的过滤器正在更改我的 api_token,因此在发送呼叫之前,我的“秘密”测试 api_token 被更改为真正的 api_token。哎呀。所以道德是值得花时间编写测试。

于 2013-11-19T18:17:32.077 回答