С Rails 4 и веб-драйвером selenium используйте Sauce Labs на Travis CI, но не локально

Я заполняю спецификации для проекта Rails с открытым исходным кодом, и мне нужно запустить приложение в браузере для некоторых спецификаций функций. Я хотел бы использовать Sauce Labs в Travis CI, но без необходимости переписывать свои спецификации для локального использования Sauce Labs, потому что:

  1. Я не хочу подключаться к Интернету во время разработки, чтобы запустить свои спецификации.
  2. Если спецификации будут зависеть от Sauce Labs, участники не смогут сами запускать спецификации без создания собственной учетной записи Sauce Labs и env vars.

Я не смог найти документацию с подробным описанием этого сценария. Каков наилучший способ добиться этого?


person Chris Fritz    schedule 23.11.2014    source источник


Ответы (1)


Для тех, у кого похожие потребности, вот что я сделал:

.travis.yml:

env:
  global:
    - secure: "encrypted sauce username"
    - secure: "encrypted sauce secret key"

addons:
  sauce_connect: true

before_install:
  # install the ed text editor which we use to append 
  # file contents to a specific line of another file
  - sudo apt-get install -y ed
  # appends contents of travis/Gemfile.travis to Gemfile
  - cat travis/Gemfile.travis >> Gemfile
  # adds contents of travis/rails_helper.rb.travis to line 12 of spec/rails_helper.rb
  - ed -s spec/rails_helper.rb <<< '12r travis/rails_helper.rb.travis'$'\nw'

travis/Gemfile.travis:

group :test, :development do
  gem 'sauce', '~> 3.1.1'
  gem 'sauce-connect'
  gem 'parallel_tests'
end

travis/rails_helper.rb.travis:

require 'sauce'
require 'sauce/capybara'

# change to "Capybara.default_driver = :sauce" to use sauce 
# for ALL feature specs, not just ones marked with "js: true"
Capybara.javascript_driver = :sauce

Sauce.config do |config|
  config[:browsers] = [
    ['Linux', 'Chrome', nil],
    # and other OS/browser combos you want to support...
  ]
end

ОБНОВЛЕНИЕ (25.11.2014):

В итоге я использовал немного другую конфигурацию в своем окончательном решении. Мне не понравилась хрупкость вставки в номер строки. Вместо специальных включений Sauce в отдельных файлах я просто вложил специальную конфигурацию в условное выражение, в зависимости от того, установлено ли для переменной среды SAUCY значение true.

.travis.yml:

env:
  global:
    - secure: "encrypted sauce username"
    - secure: "encrypted sauce secret key"
    - SAUCY: true

addons:
  sauce_connect: true

Gemfile:

group :development, :test do
  # other gems...
  if ENV['SAUCY']
    # gems for sauce
    gem 'sauce', '~> 3.1.1'
    gem 'sauce-connect'
    gem 'parallel_tests'
  end
end

spec/rails_helper.rb:

# after other requires
if ENV['SAUCY']
  require 'sauce'
  require 'sauce/capybara'

  # change to "Capybara.default_driver = :sauce" to use sauce 
  # for ALL feature specs, not just ones marked with "js: true"
  Capybara.javascript_driver = :sauce

  Sauce.config do |config|
    config[:browsers] = [
      ['Linux', 'Chrome', nil],
      # and other OS/browser combos you want to support...
    ]
  end
end

Таким образом, я также могу легко использовать Sauce локально, если захочу:

SAUCY=true bundle install
SAUCY=true SAUCE_USERNAME=username SAUCE_ACCESS_KEY=access_key bundle exec rspec
person Chris Fritz    schedule 24.11.2014
comment
Я хранитель жемчужины соуса; Мне нравится это решение для использования соуса только на Трэвисе! На [Sauce Gem Wiki] есть мини-руководство (github.com/saucelabs/ соус_ruby/wiki/Swappable-Sauce) для замены Sauce с помощью переменной среды; В Travis вы можете использовать переменную среды TRAVIS. - person Dylan Lacey; 25.11.2014