我正在使用 RSpec 为使用 rails 制作的api设置测试。在其中一项测试中,我尝试添加一些身份验证标头,但是似乎标头不会合计到我的请求中。如何正确传递这些标头?
我需要传递3个标头( client , access-token 和 uid ),以便系统将用户识别为已登录。如果不通过,则系统未登录error message
如果我手动尝试访问相同的端点,则在 postman 上进行测试的端点,然后简单地传递标头it works
RSpec.describe Api::V1::Profiles::CreditCardsController, type: :api do
describe 'POST /api/v1/profiles/credit_cards' do
let!(:profiles) {FactoryGirl.create_list(:profile, 1)}
it 'Usuário cadastrando cartão no sistema' do
number = Faker::Stripe.valid_card
params = {
:number => number,
:expiration_date => Faker::Stripe.year + '/' + Faker::Stripe.month,
:brand => 'Visa',
:proper_name => Faker::Name.name,
:cvv => Faker::Stripe.ccv,
}
headers = auth_headers(profiles[0])
requisicao = post '/api/v1/profiles/credit_cards', params, headers
# byebug
expect(last_response.status).to eq(200)
end
end
在我的 byebug 中,如果我访问要添加的变量 headers ,则设置正确的东西:
{"access-token"=>"eQV4yjzKU7cfCgD2kLcMPQ", "client"=>"FWJQNb-aRFD6lmYW1MU8Sw", "uid"=>"ericrice@feeney.com"}
注意:上面的值不是真实值,它们是由 factory girl 库
生成的但是,当我访问我的请求标头时,它们不会显示:
{"X-Frame-Options"=>"SAMEORIGIN", "X-XSS-Protection"=>"1; mode=block", "X-Content-Type-Options"=>"nosniff", "Content-Type"=>"application/json; charset=utf-8", "Cache-Control"=>"no-cache", "X-Request-Id"=>"0ed4657c-507d-4033-bc20-81d452de0d1b", "X-Runtime"=>"0.004898", "Date"=>"Wed, 16 Jan 2019 16:43:03 GMT", "X-Rack-Cache"=>"pass", "Vary"=>"Origin", "Content-Length"=>"59"}
我尝试从 type:api 切换到 type:request 。 type:api 包括 Rack :: Test :: Methods ,它弄乱了我的响应变量,正如@januszm在评论here中指出的那样。但是,起初,这似乎对我的情况没有任何影响。但是我坚持要进行测试,并意识到确实可以解决我的问题。
答案 0 :(得分:0)
从类型:api 切换为类型:request ,使我可以访问 request 和 response 变量,在此之前,我必须自己创建变量才能尝试访问它们。
使用 type:api 时,我可以访问 last_response 而不是 response ,因为我的 type:api >包含了 Rack :: Test :: Methods ,它根据this post弄乱了这些变量(响应和请求)。
当我切换到 type:request ,并且不再导入 Rack :: Test :: Methods 时,我能够访问 request 变量,并看到正确添加了所需的标题。