如何在生产模式下在localhost上运行Capybara / Poltergeist?

时间:2016-11-15 02:13:32

标签: ruby-on-rails jenkins capybara poltergeist

尝试在Jenkins版本上进行无头UI烟雾测试。看起来Poltergeist将是可行的方式,但我无法让驱动程序接收任何内容。

目前的策略是编译所有资产,就像生产部署将要发生一样。

第一步:进行“本地主机生产部署”

bundle install --deployment --retry=3
npm install
cd client # where all React.js code lives
node_modules/.bin/webpack -b --config webpack.production.config
cd ..
bundle exec rake assets:precompile RAILS_ENV=production
mkdir -p public/images;
cp -R app/assets/images/* public/images/

第二步:在生产模式下运行localhost:3000

RAILS_ENV=production bundle exec rails s
=> Rails 4.2.6 application starting in production on http://localhost:3000

第三步:运行指向localhost:3000

的冒烟测试
bundle exec rspec spec/features

这里是我对水豚/恶作剧的极其琐碎的测试例子:

require "rails_helper"

Capybara.javascript_driver = :poltergeist
Capybara.run_server = false
Capybara.app_host = "http://localhost:3000"

RSpec.describe "FooBar copyright", js: true do
  context "when on the homepage" do
    it "displays 'All rights reserved'" do
      Rails.env = "production"
      page.visit "/"
      expect(page).to have_content "All rights reserved"
    end
  end
end

你会认为这会起作用......但事实并非如此。测试失败,因为他们没有拿起任何内容。我做了一些调试,Rails.env是正确的,current_url也正确设置为localhost:3000

在浏览器中手动转到localhost:3000也可以正常工作。资产正在正确编译。

由于某些原因,水豚/恶作剧者根本没有拿起内容。收到此错误:

 Failure/Error: expect(page).to have_content "All rights reserved"
   expected to find text "All rights reserved" in ""

感谢任何帮助!

0 个答案:

没有答案