我有一个需要执行一些JavaScript的RSpec集成测试。我已经包含了Poltergeist并安装了PhantomJS,但每当我运行该示例时,我都会收到此错误:
Failure/Error: page.execute_script("$('form')[0].submit();")
Capybara::NotSupportedByDriverError:
Capybara::Driver::Base#execute_script
规范是:
require 'spec_helper'
describe "Signup", :type => :feature do
describe "workflow" do
it "ensures entry of contact information" do
visit 'signup/action'
# snip - use Capybara to fill out form elements
page.execute_script("$('form')[0].submit();")
page.should have_content("Name can't be blank")
page.should have_content("Email can't be blank")
# snip - use Capybara to fill out more form elements
page.execute_script("$('form')[0].submit();")
page.should have_content("Next page")
end
end
end
我认为问题在于我不确定如何表明Capybara应该使用Poltergeist作为其JavaScript驱动程序。 Poltergeist documentation说:
安装
将poltergeist添加到您的Gemfile中,并在测试设置中添加:
require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist
但它没有说具体应该涉及哪个文件。它also says:
定制
您可以通过测试设置中的以下代码自定义Capybara设置Poltegeist的方式:
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, options)
end
但是我不清楚我是否需要在测试中包含这个内容。再说一次,如果需要,我不知道该把它放到哪里。
我缺少什么?
答案 0 :(得分:11)
尝试将js: true
放入您的描述行。我知道我必须为工作中的应用程序上的功能规格执行此操作:
describe "Signup", :type => :feature, :js => true do
我没有看到任何其他配置。不久之前,当我设置它时:)
您可以在RSpec.configure块之前调用一次Capybara驱动程序配置方法:
Capybara.default_selector = :css
Capybara.register_driver :poltergeist do |app|
Capybara::Poltergeist::Driver.new(app, :window_size => [1920, 1080], :phantomjs_logger => nil)
end
Capybara.javascript_driver = :poltergeist
RSpec.configure do |config|
还要确保使用截断而非事务与数据库清理器。 Poltergeist在一个单独的线程上运行,因此如果你使用事务性的话,你可能会遇到奇怪的数据库问题。
修改强>
啊,真实的东西在这里提到:https://github.com/jnicklas/capybara#using-capybara-with-rspec在水豚自述文件中。