ruby-on-rails-4 - 使用 Rails 4 和 selenium 网络驱动程序,在 Travis CI 上使用 Sauce Labs 但不是在本地

标签 ruby-on-rails-4 selenium-webdriver rspec-rails travis-ci saucelabs

我正在填写一个开源 Rails 项目的规范,并且需要在浏览器中运行该应用程序以获得我的一些功能规范。我想在 Travis CI 上使用 Sauce Labs,但无需重写我的规范即可在本地使用 Sauce Labs,因为:

  1. 我不想在开发过程中必须连接到互联网才能运行我的规范。
  2. 使规范依赖于 Sauce Labs 将使贡献者无法在不设置自己的 Sauce Labs 帐户和环境变量的情况下自行运行规范。

我找不到详细说明这种情况的文档。实现这一目标的最佳方式是什么?

最佳答案

对于那些有类似需求的人,这就是我最终做的:

.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

更新(2014/11/25):

我最终在最终解决方案中使用了稍微不同的配置。我不喜欢在行号处插入的脆弱性。我没有将特殊的 Sauce 包含在单独的文件中,而是根据环境变量 SAUCY 是否设置为 true,将特殊配置嵌套在条件中。

.travis.yml:

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

addons:
  sauce_connect: true

gem 文件:

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

关于ruby-on-rails-4 - 使用 Rails 4 和 selenium 网络驱动程序,在 Travis CI 上使用 Sauce Labs 但不是在本地,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27091706/

相关文章:

ruby-on-rails - 将聚合函数 SUM 与 GROUP BY 一起应用

ruby-on-rails - ruby on rails 聊天应用程序通过端口 80 托管站点不可知(无 flash 和 websockets)

Mysql2 通过 nginx 和 unicorn 访问 Rails 应用程序时出错

ruby-on-rails - 如何将 CanCanCan 与枚举字段一起使用?

ruby-on-rails - 在 Rspec View 中使用 Factory Girl

Python selenium 同时按 ctrl + v

c# - 如何使用 C# 使用 Selenium 将所有元素放入列表或字符串中?

java - 在 JavascriptExecutor 中修改 Java 变量

ruby-on-rails - 测试 has_many 与 RSpec 的关联

rspec-rails - 从 rspec-rails 2.x 迁移到 3.x 后出现错误