我正在使用rails-api整理Restful JSON API。
我正在使用rspec测试我的 DELETE api / v1 / users /:id。当我使用HTTP令牌作为身份验证(用于删除操作)时,我无法通过它。我已经通过终端进行了测试,但它可以正常运行,但测试不会通过。
这是测试规范/ requests / api / v1 / users_spec.rb
describe "DELETE api/v1/users/:id" do
it "deletes the requested user" do
user = FactoryGirl.create(:user)
request_headers = {
'Authorization' => 'Token token="foobar"'
}
delete "api/v1/users/#{user.id}", request_headers
expect(response.status).to eq 204
end
end
我得到的错误是expect 204 got 401.
在我的users_controller.rb中,我使用它来获取令牌
before_action :authenticate, only: [ :destroy ]
TOKEN = "foobar"
def destroy
@user = find_user
@user.destroy
head 204
end
private
def authenticate
authenticate_or_request_with_http_token do |token, options|
token == TOKEN
end
end
我还尝试了以下方法在request_headers
中设置授权令牌request_headers = {
'HTTP_AUTHORIZATION' => 'Token token="foobar"'
}
有谁可以指出我哪里出错了或指出我正确的方向?
答案 0 :(得分:2)
现在通过这种方法解决了这个问题:
describe "DELETE api/v1/users/:id" do
let(:auth_headers) {
{ 'AUTHORIZATION' => 'Token token="foobar"' }
}
let(:user) { FactoryGirl.create(:user) }
it "deletes the requested user" do
delete "api/v1/users/#{user.id}", {}, auth_headers
expect(response.status).to eq 204
end
end
基本上需要在第三个参数中设置http标头。上面的解决方案将其作为第二个传递给它,因此它没有得到认可。