2015-07-28 4 views
0

У меня есть этот интеграционный тест для моего Rails приложения:не может иметь смысл поведения водосвинку

require 'test_helper' 

class StudyCapybaraTest < ActionDispatch::IntegrationTest 
    def setup 
    @user = users(:archer) 
    @vocabs = @user.vocabs 
    Capybara.register_driver :selenium_chrome do |app| 
     Capybara::Selenium::Driver.new(app, :browser => :chrome) 
    end 
    Capybara.current_driver = :selenium_chrome 
    #Capybara.default_wait_time = 5 
    visit login_path 
    fill_in "session_email", with: @user.email 
    fill_in "session_password", with: 'password' 
    click_button "session_commit" 
    end 

    test "full study process" do 
    assert_title "Home | Word Up" 
    visit study_user_path(@user) 
    .... 
    end 
end 

Жутко, когда я удалить первую строку первого теста «полный учебный процесс»

assert_title "Home | Word Up"

тест не пройден, поскольку пользователь тест не кажется, нужно войти в систему. Та же проблема возникает, когда я двигаюсь

visit study_user_path(@user)

в функцию настройки (как и раньше).

Но это ничего не меняет о последовательности и логике, верно? Единственное, что я могу придумать, это то, что утверждение приходит к раннему, а приложение не успевает выполнить инструкции, необходимые для удовлетворения утверждений.

Это вопрос срочности, и если да, то как я могу предотвратить их в будущем? Спасибо!

ответ

1

Во-первых, ваша интуиция по этому вопросу является правильной. click_button делает именно это - он нажимает кнопку. Он не дожидается формы для публикации, она не дожидается появления какого-либо ajax и т. Д. Таким образом, без assert_title ваш тест нажимает кнопку и сразу же меняет URL-адрес в браузере. Изменение URL-адреса в браузере приведет к отмене любого представления формы или поведения, вызванного вызовом click_button. Вы должны ждать после click_button чего-то, что изменения на странице в результате нажатия на кнопку, вдоль линий

assert_text('You are now logged in') 

Во-вторых, метод установки выполняется перед каждым испытанием, так что вы действительно не хотите для регистрации драйвера там, так как это нужно сделать только один раз.

+0

Thx, Tom. Не могли бы вы показать мне, как я могу настроить свой тест, чтобы он работал без злоупотребления утверждениями как тайм-ауты/перерывы? На самом деле я не хотел делать это утверждение assert_title "Home | Word Up". Я изначально написал его, чтобы посмотреть, что происходит. Оптимально я хотел бы войти в систему и сразу же перейти на study_user_path, так как это то, что я хочу проверить. Также, где бы вы зарегистрировали драйвер? (Мне нужно это в каждом тесте) – Flip

+1

Зарегистрируйте свой драйвер в test_helper. –

+0

Почему вы считаете, что у вас есть утверждение о злоупотреблениях утверждениями? Все его высказывания - это убедиться, что этот текст появляется - именно это нужно сделать вашему тесту после входа в систему, чтобы узнать, что логин завершен. Я думаю, если бы вы захотели, вы могли бы написать вспомогательную функцию wait_for_login_to_complete или что-то, что просто делает утверждение, которое может сделать ваш тест более чистым. –

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