Làm cách nào để đặt tiêu đề yêu cầu trước khi thực hiện yêu cầu về thông số yêu cầu?Truy cập để yêu cầu đối tượng trong thông số kỹ thuật yêu cầu
Tôi đang di chuyển thông số bộ điều khiển để yêu cầu thông số kỹ thuật trên API của tôi bằng cách sử dụng Rails. Một điều tôi đang mắc kẹt là tôi không có quyền truy cập vào một đối tượng request
để cho phép các yêu cầu.
On số kỹ thuật điều khiển của tôi, tôi có quyền truy cập đến một phương pháp tôi đã tạo mà ký một người dùng cụ thể:
def sign_in(user)
token = user.api_keys.first.token
# note the request object being used in the next line
request.env["HTTP_AUTHORIZATION"] = ActionController::HttpAuthentication::Token.encode_credentials(token)
end
này hoạt động tốt trên thông số kỹ thuật điều khiển, tôi có thể yên tâm làm:
before { sign_in(user) }
it { post :endpoint, params }
Nhưng theo yêu cầu, đối tượng request
không khả dụng. Nếu tôi cố gắng:
before { sign_in(user) }
it { post "/api/endpoint", params }
tôi nhận được request
trên phương pháp helper của tôi như nil
.
Tôi biết tôi có thể làm:
it { post "/api/endpoint", {"HTTP_AUTHORIZATION" => ... } }
Nhưng điều này dường như rất nhiều lộn xộn trong spec, đặc biệt so với một spec điều khiển.
Tôi đã thử sử dụng ActionDispatch::TestRequest::DEFAULT_ENV
theo đề xuất của this answer nhưng cũng không hoạt động (tôi nhận được 401
).
Tuyệt vời, cảm ơn bạn! –
Điều này có được chỉ định trong tài liệu rspec ở bất kỳ đâu không? –