Travis CI无法识别xvfb上的大分辨率导致功能规格失败

时间:2016-07-05 23:48:19

标签: ruby-on-rails angularjs twitter-bootstrap travis-ci xvfb

我试图让travis传递我的功能规格,但是使用xvfb默认设置时,它会以较小的窗口运行。由于该网站使用响应式网页设计,这意味着它正在查看该页面,就好像它是在移动设备上一样。我的测试因此而失败。

我四处搜索并找到了各种不同的方法来设置我的.travis.yml文件,但这些方法都不起作用,但这是我目前所拥有的:

.travis.yml

language: ruby
rvm:
- 2.3.0
addons:
  postgresql: "9.4"

before_install:
  - "export DISPLAY=:99.0"
  - "sh -e /etc/init.d/xvfb start"
  - "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16"
  - "sleep 3"

before_script:
- cp config/database.yml.travis config/database.yml
- cp config/application.yml.example config/application.yml
- psql -c 'create database db_test;' -U postgres

script:
- bundle exec rake db:migrate
- bundle exec rake

具有响应位(以haml为单位)的示例视图代码:

_view.haml

.row
  .col-xs-12
    %label
      %span.visible-lg-inline Line {{question + 1}}:
      %b

正如你所看到的,visible-lg事物正在蠢蠢欲动。整个应用程序在不同位置使用visible-lg / hidden-lg个类,因此更改此选项不是一个选项。它也是自助式的。

Associated Travis错误:

Failure/Error: expect(page).to have_content("Line 1: #{question}")

我的规格在本地传递,因为Firefox加载标准大小的窗口与移动大小/小窗口。如何更改.travis.yml文件以使其尊重我设置的较大屏幕分辨率?

Travis错误的另一个例子:

Failure/Error: click_on 'Preview'

 Capybara::ElementNotFound:
   Unable to find link or button "Preview"

('预览'存在但不在移动模式下)

我正在使用Ruby 2.3,Rails 4.2.5和AngularJS

1 个答案:

答案 0 :(得分:1)

答案不是我原先认为的travis.yml文件。

经过一周的搜索,我偶然发现了这个: https://discuss.circleci.com/t/capybara-driver-rack-test/407,其中包含以下链接:http://blaulabs.de/2011/11/22/acceptance-testing-with-responsive-layouts/

在我的spec/spec_helper.rb中,我在配置部分后面的最底部放了以下内容:

def set_selenium_window_size_to_large
  page.driver.browser.manage.window.resize_to(1280, 1280)
end

def set_selenium_window_size_to_small
  page.driver.browser.manage.window.resize_to(600, 600)
end

使用上面的代码,我现在可以调用2种不同的窗口大小,这样我就可以测试在移动模式或桌面模式下是否显示汉堡菜单选项。

在我的功能规范中,我在之前的块中调用了该方法,因此我需要它的所有测试都得到它。另外,rails_helper拨打spec_helper,因此我就这样说了。

require 'rails_helper'

feature 'A question page', :devise, js: true do
  before do
    @question = create :question

    set_selenium_window_size_to_large

    visit question_path
    click_on 'Get started'
  end
  scenario 'it has some questions' do
    expect(page).to have_content("Line 1: #{question}")
  end
end

我的.travis.yml文件又回到了一个更简单的文件:

language: ruby
rvm:
- 2.3.0
addons:
  postgresql: "9.4"

before_install:
- "/sbin/start-stop-daemon --start --quiet --pidfile /tmp/custom_xvfb_99.pid --make-pidfile --background --exec /usr/bin/Xvfb -- :99 -ac -screen 0 1280x1024x16"

before_script:
- cp config/database.yml.travis config/database.yml
- cp config/application.yml.example config/application.yml
- psql -c 'create database db_test;' -U postgres
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start

script:
- bundle exec rake db:migrate
- bundle exec rake

我所有的测试都是预期的绿色!