Biorąc pod uwagę moje konsumenci API są wymagane, aby wysłać nagłówek HTTP klient takiego:Wysyłanie niestandardowe nagłówki przez RSpec
# curl -H 'X-SomeHeader: 123' http://127.0.0.1:3000/api/api_call.json
Wtedy mogę przeczytać ten nagłówek w sposobie before_filter tak:
# app/controllers/api_controller.rb
class ApiController < ApplicationController
before_filter :log_request
private
def log_request
logger.debug "Header: #{request.env['HTTP_X_SOMEHEADER']}"
...
end
end
Jak dotąd świetnie. Teraz chciałbym przetestować to przy użyciu rspec jak nastąpiła zmiana w zachowaniu:
# spec/controllers/api_controller_spec.rb
describe ApiController do
it "should process the header" do
@request.env['HTTP_X_SOMEHEADER'] = '123'
get :api_call
...
end
end
Jednak request
otrzymał w ApiController nie będzie w stanie znaleźć zmienną cel.
Podczas próby same code
z nagłówkiem HTTP_ACCEPT_LANGUAGE będzie działać. Czy niestandardowe nagłówki są odfiltrowane?
PS: Niektóre przykłady w Internecie używają request
zamiast @request
. Chociaż nie jestem pewien, który z nich jest poprawny, jak w obecnej kombinacji Rails 3.2/RSpec 2.14 - obie metody nie wywołają właściwego zachowania, ALE oba działają również z HTTP_ACCEPT_LANGUAGE
.
Sorry - odpowiedź przyszła tak jak ja testowałem to za dobrze. Zobacz aktualizację. Dziękuję Ci. –
Sprawdź moją aktualizację. –
Jeszcze raz dziękuję - próbowałem tego również i to nie zadziała dla mnie. Czy pomyślnie przetestowałeś to w specyfikacji kontrolera RSpec? –