2014-01-30 3 views
2

Я хотел бы настроить период времени, после которого мое приложение Rails автоматически завершит сеанс пользователя.Тестирование Тайм-аут сеанса разработки с RSpec

Я нашел this question, чтобы дать мне именно то, что мне нужно, но я хотел бы подойти к этому через TDD. У меня есть относительно прочный набор тестов для приложения, я просто немного потерял, когда дело доходит до тестирования, если срок действия пользователя истек, за исключением того, что у него есть тест, и ждать окончания сеанса после того, как прошло x.minutes , Конечно, есть лучший способ.

Я проверил документацию Devise and Warden для помощников по тестированию, занимающихся этим, и подошел сухой. У кого-нибудь есть подсказки?

+0

Вам не нужно тестировать функции Разрабатывают такие как тайм-аут, так как он уже испытан в Завещании. – boblin

+0

Вы можете попробовать что-то вроде [timecop] (https://github.com/travisjeffery/timecop). Это должно позволить вам начать сеанс в тесте интеграции, а затем ускорить перемотку вперед 30 минут и проверить, что он истек. –

+0

[Тест тайм-аута] [https://github.com/plataformatec/devise/blob/master/test/integration/timeoutable_test.rb] может иметь ключ. Похоже, они называют 'get expire_user_path (user)' для имитации таймаута, но это дает ошибку «неопределенного метода» в моих тестах RSpec. –

ответ

2

Как насчет stubbing user.timedout?, чтобы вернуть true? Или вы можете передать свое время в своем тесте, которое превышает ваше пользовательское значение тайм-аута, например user.timed_out?(31.minutes.ago).

0

По умолчанию устройство устанавливает тайм-аут до 30 минут. вы можете использоваться user.timedout?([specify time in past])

Ex:

user.timedout?(30.minutes.ago) вернет ложь

user.timedout?(10.minutes.ago) возвращает истину

вы можете проверить user.timedout?() значение внутри RSpec.

0

Вместо того, чтобы играть с точным временем прошел:

Поскольку Разрабатывают построено на Warden, вы можете имитировать, что Разрабатывает :: SessionsController истек Пользователь путем Warden :: Test :: помощников, которые дают доступ к прокси-сервера.


# settings_page_spec.rb 

include Warden::Test::Helpers 

it 'does not allow updating password after timed out' do 
    expect(current_path).to eq(user_settings_path(user)) 
    clink_link 'Manage Password' 
    expect(page).to have_button('Update Password') 
    Warden.on_next_request do |proxy| 
     proxy.set_user(nil) 
     click_button 'Update Password' 
     expect(current_path).to eq(login_path) 
    end 
end 

Полный блог здесь: http://www.morphogenic.net/2016/10/devise-test-timeout-user-in-featureintegration-specs-using-warden/

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