Javascript 在 rails 之外使用 poltergiest/capybara 时触发
Javascript trigger when using poltergiest/capybara outside of rails
我在 rails 之外使用 Capybara、rspec 和 poltergeist 来 运行 一些无头集成测试。场景是,有 2 个 select 字段。如果我 select 第一个 select 字段中的值,第二个 select 字段将根据第一个 select 字段的值填充。如果我 运行 我的规格在 Mac OSX 中使用 poltergeist,则规格有效。但是在 ubuntu 中,它失败了,似乎没有填充第二个 select 字段。我的规格上也有 js: true
。
这是我的 spec_helper.rb:
require 'capybara/poltergeist'
require 'capybara'
require 'capybara/rspec'
require 'pry'
require 'support/session_helper'
RSpec.configure do |config|
config.include Capybara::DSL
config.include Capybara::Poltergeist
config.include SessionHelper
Capybara.run_server = false
Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
Capybara.app_host = "http://vps-staging.dropmysite.com"
options = { js_errors: false }
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, options)
end
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
end
编辑 添加失败规范
require 'spec_helper'
feature 'vps-staging', js: true do
background do
visit '/'
end
let(:timestamp) { Time.now.strftime('%Y-%m-%d_%H-%M-%S') }
feature 'create private server' do
background do
sign_in 'blahblah@blahblah.com'
end
it 'successfully creates server' do
find(:xpath, "//a[@href='/en/private_servers/new']").click
directory_field = all(".tagit-new")[0].find("input")
select 'Ubuntu', from: 'distribution'
select '15.04', from: 'version'
fill_in 'private_server_profile_name', with: "Auto Test #{timestamp}"
directory_field.set "/home"
click_button 'Save'
visit '/en/dashboard'
expect(page.text).to have_content "Auto Test #{timestamp}"
end
end
end
EDIT 我发现的另一件事是,这个错误只发生在 phantomjs 1.9.8 及以下版本。 2.0 工作正常。
正如 Tom Walpole 指出的那样,将 poltergeist 从 1.6.0 更新到 1.7.0 解决了我的大部分问题,但我仍然需要稍微调整一下才能完全解决我的问题。我所做的是创建一个 js
文件来保存 polyfill 并编辑我的 spec_helper.rb
并告诉 poltergeist 使用选项 extensions
并包含 polyfill.js从而将此代码从
options = { js_errors: false }
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, options)
end
至
options = { js_errors: false, extensions: ["spec/support/polyfill.js"] }
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, options)
end
我在 rails 之外使用 Capybara、rspec 和 poltergeist 来 运行 一些无头集成测试。场景是,有 2 个 select 字段。如果我 select 第一个 select 字段中的值,第二个 select 字段将根据第一个 select 字段的值填充。如果我 运行 我的规格在 Mac OSX 中使用 poltergeist,则规格有效。但是在 ubuntu 中,它失败了,似乎没有填充第二个 select 字段。我的规格上也有 js: true
。
这是我的 spec_helper.rb:
require 'capybara/poltergeist'
require 'capybara'
require 'capybara/rspec'
require 'pry'
require 'support/session_helper'
RSpec.configure do |config|
config.include Capybara::DSL
config.include Capybara::Poltergeist
config.include SessionHelper
Capybara.run_server = false
Capybara.default_driver = :poltergeist
Capybara.javascript_driver = :poltergeist
Capybara.app_host = "http://vps-staging.dropmysite.com"
options = { js_errors: false }
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, options)
end
config.expect_with :rspec do |expectations|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
end
config.mock_with :rspec do |mocks|
mocks.verify_partial_doubles = true
end
end
编辑 添加失败规范
require 'spec_helper'
feature 'vps-staging', js: true do
background do
visit '/'
end
let(:timestamp) { Time.now.strftime('%Y-%m-%d_%H-%M-%S') }
feature 'create private server' do
background do
sign_in 'blahblah@blahblah.com'
end
it 'successfully creates server' do
find(:xpath, "//a[@href='/en/private_servers/new']").click
directory_field = all(".tagit-new")[0].find("input")
select 'Ubuntu', from: 'distribution'
select '15.04', from: 'version'
fill_in 'private_server_profile_name', with: "Auto Test #{timestamp}"
directory_field.set "/home"
click_button 'Save'
visit '/en/dashboard'
expect(page.text).to have_content "Auto Test #{timestamp}"
end
end
end
EDIT 我发现的另一件事是,这个错误只发生在 phantomjs 1.9.8 及以下版本。 2.0 工作正常。
正如 Tom Walpole 指出的那样,将 poltergeist 从 1.6.0 更新到 1.7.0 解决了我的大部分问题,但我仍然需要稍微调整一下才能完全解决我的问题。我所做的是创建一个 js
文件来保存 polyfill 并编辑我的 spec_helper.rb
并告诉 poltergeist 使用选项 extensions
并包含 polyfill.js从而将此代码从
options = { js_errors: false }
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, options)
end
至
options = { js_errors: false, extensions: ["spec/support/polyfill.js"] }
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, options)
end