Перерывы на совместимость на тестах rails-devise-role

Тесты Selenium приложения rails-devise- role для user-delete-spec.rb а также user-edit-spec.rb кажется, ломается при запуске в CI Codeship. Rspec отлично работает на моей локальной машине, но ломается в Codeship.

Вывод rspec, который я получаю, выглядит следующим образом:

Failures:

1) User delete user can delete own account
Failure/Error: visit edit_user_registration_path(user)

Selenium::WebDriver::Error::ServerError:
  status code 500
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/response.rb:72:in `assert_ok'
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/response.rb:32:in `initialize'
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:83:in `new'
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:83:in `create_response'
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/default.rb:107:in `request'
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/http/common.rb:61:in `call'
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/w3c_bridge.rb:640:in `execute'
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/w3c_bridge.rb:114:in `create_session'
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/remote/w3c_bridge.rb:76:in `initialize'
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/firefox/w3c_bridge.rb:45:in `initialize'
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/common/driver.rb:52:in `new'
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver/common/driver.rb:52:in `for'
# /home/rof/cache/bundler/ruby/2.3.0/gems/selenium-webdriver-3.4.0/lib/selenium/webdriver.rb:88:in `for'
# /home/rof/cache/bundler/ruby/2.3.0/gems/capybara-2.14.0/lib/capybara/selenium/driver.rb:22:in `browser'
# /home/rof/cache/bundler/ruby/2.3.0/gems/capybara-2.14.0/lib/capybara/selenium/driver.rb:62:in `visit'
# /home/rof/cache/bundler/ruby/2.3.0/gems/capybara-2.14.0/lib/capybara/session.rb:269:in `visit'
# /home/rof/cache/bundler/ruby/2.3.0/gems/capybara-2.14.0/lib/capybara/dsl.rb:50:in `block (2 levels) in <module:DSL>'
# ./spec/features/users/user_delete_spec.rb:21:in `block (2 levels) in <top (required)>'

2) User edit user changes email address
Failure/Error: visit edit_user_registration_path(user)

Selenium::WebDriver::Error::ServerError:
  status code 500
# [removed stack trace]

3) User edit user cannot cannot edit another user's profile
Failure/Error: visit edit_user_registration_path(other)

Selenium::WebDriver::Error::ServerError:
  status code 500
# [removed stack trace]

Finished in 23.21 seconds (files took 2.99 seconds to load)
31 examples, 3 failures

Failed examples:

rspec ./spec/features/users/user_delete_spec.rb:18 # User delete user can delete own account
rspec ./spec/features/users/user_edit_spec.rb:18 # User edit user changes email address
rspec ./spec/features/users/user_edit_spec.rb:45 # User edit user cannot cannot edit another user's profile

Это пример одного из неудачных сценариев:

scenario 'user can delete own account' do
    # skip 'skip a slow test' [removed from the original file]
    user = FactoryGirl.create(:user)
    login_as(user, :scope => :user)
    visit edit_user_registration_path(user)
    click_button 'Cancel my account'
    page.driver.browser.switch_to.alert.accept
    expect(page).to have_content I18n.t 'devise.registrations.destroyed'
end

Что здесь не так, и как я могу изменить это так, чтобы тест прошел? (Для пояснения, нет ошибки 500 ни в моем локальном развертывании ни на одной из этих страниц, ни в живом развертывании моего приложения Heroku, основанном на rails-devise-role.)

1 ответ

Решение

Обратился в службу поддержки Codeship, которая очень помогла мне, и сказала, что это проблема как Firefox, так и geckodriver для Firefox, которые необходимо обновить на виртуальной машине Codeship. Если у кого-то еще есть эта проблема, код, который заставляет ее работать ниже:

export FIREFOX_VERSION=53.0.3
curl -sSL https://raw.githubusercontent.com/codeship/scripts/master/packages/firefox.sh | bash -s
export GECKODRIVER_VERSION=0.17.0
source /dev/stdin <<< "$(curl -sSL https://raw.githubusercontent.com/codeship/scripts/master/languages/rust.sh)"
curl -sSL https://raw.githubusercontent.com/codeship/scripts/master/packages/geckodriver.sh | bash -s

Огромное спасибо Джо Северту из команды поддержки Codeship за то, что он сообщил мне об этом!

Другие вопросы по тегам