2015-08-01 1 views
1

Я пытаюсь проверить, что происходит после входа в систему через Devise gem. Например, у меня есть контроллер, чтобы перейти к student_dashboard_path после успешного входа в систему.Как проверить устройство после входа в путь с Capybara

Как я могу проверить это с Capybara и Rspec?

настоящее время у меня это:

/spec/features/user_signs_in_sees_dashboard_spec.rb

require 'rails_helper' 

feature 'User sign in' do 
    scenario 'successfully from sign in page and sees student dashboard' do 
    sign_in 
    visit student_dashboard_path 
    expect(current_path).to eq(student_dashboard_path) 
    end 
end 

и у меня есть это:

/spec/support/features/sign_in.rb

module Features 
    def sign_in 
    visit user_session_path 
    fill_in 'Email', with: User.first.email 
    fill_in 'Password', with: User.first.password 
    click_button 'Log in' 
    end 
end 

и я получаю это сообщение об ошибке:

1) User signs in successfully from sign in and sees dashboard 
Failure/Error: expect(current_path).to eq(student_dashboard_path) 

    expected: "/student/dashboard" 
     got: "/student/login" 

Я не уверен, почему я не могу войти в систему и увидеть студенческую панель.

+0

Что создает пользователь в вашем тесте, и у вас действительно есть открытый текстовый пароль? – Doon

ответ

0

Используйте capybara save_and_open_page в середине, чтобы выяснить, правильно ли установлены поля. Если вы работаете на одном и том же компьютере, вы можете переключиться на selenium, чтобы протестировать его в реальном браузере.

Также убедитесь, что этот код не нуждается в JS для работы, потому что по умолчанию помощники capybara не смогут его запустить.

1

Я оставляю свой оригинальный ответ ниже для тех, кто еще на Капибара < 2.5.0, но в 2.5.0 теперь вы можете сделать

expect(page).to have_current_path(<expected path>) 

и он будет использовать поведение ожидания водосвинку в то время как проверка на пути

---- Ниже только для Capybara версии < 2.5.0

ожидать (current_path) .то экв (...) не ждать пути изменения, он просто сравнивает текущий путь в то время, когда это называется. Если вы положите спать после нажатия кнопки, я уверен, что это работает. Лучшим решением было бы иметь что-то вроде

expect(page).to have_text('You are now logged in') 

после нажатия кнопки click_button. Это заставит capybara дождаться завершения регистрации, загрузится страница (и появится уведомление в журнале), и поэтому до тех пор, пока не изменится текущий_path.

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