2015-12-07 2 views
0

Я использую 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 не попал в действие.

+0

В примере с образцом 'simple_token_authentication' README показаны заголовки X-User-Token * и * X-User-Email в заголовке. Возможно, вам также нужно предоставить X-User-Email? – zetetic

ответ

Смежные вопросы