Я использую RSpec для проверки моей реализации смеси Devise и драгоценного камня simple_token_authentication
.RSpec тестирование действий контроллера, DELETE сбой
Я с помощью devise_for
сказать Завещание, где искать мой контроллер сессий (source).
devise_for :users, controllers: {
registrations: 'users/devise/registrations',
sessions: 'users/devise/sessions'
}
В моем контроллере сессий, я призываю пользовательский метод, если запрос имеет определенный заголовок (source).
def create
req_from_coposition_app? ? respond_with_auth_token : super
end
def destroy
req_from_coposition_app? ? destroy_auth_token : super
end
У меня есть тест, который гарантирует, пользователь может получить маркер аутентификации. Запрос работает как ожидалось (source).
it "should be able to sign in" do
request.headers["X-Secret-App-Key"] = "this-is-a-mobile-app"
request.env['devise.mapping'] = Devise.mappings[:user]
post :create,
user: {
email: user.email,
password: user.password
},
format: :json
expect(res_hash[:email]).to eq user.email
expect(res_hash[:authentication_token]).to eq user.authentication_token
end
Далее, я хотел бы, чтобы проверить выписку (уничтожение ключа аутентификации). Я пытаюсь использовать следующий код:
it "should be able to sign out" do
token_before = user.authentication_token
request.env['devise.mapping'] = Devise.mappings[:user]
request.headers["X-Secret-App-Key"] = "this-is-a-mobile-app"
request.headers["X-User-Token"] = token_before
delete :destroy, nil, format: :json
expect(user.reload.authentication_token).to_not eq token_before
end
Однако Users::Devise::SessionsController#destroy
никогда не попал. response.status
является 302
и
response.body
#=> "<html><body>You are being <a href=\"http://test.host/\">redirected</a>.</body></html>"
Я проверил рейк маршрутов, отформатированный запрос по-разному, и проверить, что метод delete
не быть перепутан с любым местом. Я полностью потерял, почему post :create
работает, но delete :destroy
не попал в действие.
В примере с образцом 'simple_token_authentication' README показаны заголовки X-User-Token * и * X-User-Email в заголовке. Возможно, вам также нужно предоставить X-User-Email? – zetetic