Tôi đang cố đặt tiêu đề cho một số yêu cầu RSpec yêu cầu xác thực. Tiêu đề là ACCESS_TOKEN
. Không có vấn đề làm thế nào tôi cố gắng để thiết lập các tiêu đề, nó không bao giờ được thiết lập. Tôi biết các ứng dụng hoạt động vì tôi có thể tự kiểm tra nó, tôi chỉ không thể nhận được các xét nghiệm rspec để làm việc. Xem mã nguồn đầy đủ & kiểm tra sự cố này tại đây: https://github.com/lightswitch05/rspec-set-header-exampleĐặt tiêu đề trong yêu cầu RSpec 3
Vì xác thực được sử dụng trong hầu hết các thông số yêu cầu của tôi, tôi đã tạo mô-đun trợ giúp hỗ trợ để truy xuất mã thông báo truy cập và đặt tiêu đề. Dưới đây là tóm tắt về cách tôi đang cố gắng để thiết lập các tiêu đề, thấy tất cả mọi thứ tôi đã cố gắng trong full source
# my_app/spec/support/session_helper.rb
module SessionHelper
def retrieve_access_token
post api_v1_session_path({email: '[email protected]', password: 'poor_password'})
expect(response.response_code).to eq 201
expect(response.body).to match(/"access_token":".{20}"/)
parsed = JSON(response.body)
token = parsed['access_token']['access_token']
@request.headers['HTTP_ACCESS_TOKEN'] = token
end
end
một ví dụ yêu cầu spec mà sử dụng helper này và nên làm việc, nhưng luôn luôn thất bại vì tiêu đề không bao giờ được thiết lập:
# my_app/spec/requests/posts_spec.rb
# ...
context "create" do
it "creates a post" do
retrieve_access_token
post = FactoryGirl.build(:post)
post api_v1_posts_path(
post: {
title: post.title,
content: post.content
}
)
expect(response.body).to include('"id":')
expect(response.body).to include('"title":"' + post.title + '"')
expect(response.body).to include('"content":"' + post.content + '"')
expect(response.response_code).to eq 201
end
end
tôi biết tôi có thể tự thiết lập các tiêu đề trong từng get
và post
yêu cầu - nhưng đó không phải là một giải pháp duy trì cho phép API toàn. Hãy tưởng tượng phải thay đổi mọi thử nghiệm nếu tên tiêu đề thay đổi một chút.
Tôi đã sử dụng Giải pháp # 1 với một số thay đổi nhỏ: trong rails_helper tôi đã bao gồm chức năng trợ giúp làm loại bộ điều khiển. Và tôi phải thêm token trong helper của tôi như request.headers này ['HTTP_AUTH_TOKEN'] = Rails.application.secrets.default_api_token –
Đối với bất cứ ai chỉ muốn thêm header bằng RSpec 3 và Rails 4, chỉ cần gọi 'request.headers .merge! ({'X-MYHEADER': 'value'}) 'ở bất kỳ vị trí nào trước' get', 'post', v.v. để thêm các tiêu đề vào yêu cầu cho đặc tả bộ điều khiển. Xem ý chính này để biết ví dụ https://gist.github.com/quadrolls/9203f924f934398f6992162bbbcb1a0c – Squadrons