如何配置Capybara与Poltergeist合作?

时间:2014-06-25 18:19:45

标签: ruby-on-rails-3 rspec capybara rspec2 poltergeist

我有一个需要执行一些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

但是我不清楚我是否需​​要在测试中包含这个内容。再说一次,如果需要,我不知道该把它放到哪里。


我缺少什么?

  • 我需要在哪里放置Capybara和Poltergiest的配置,以及它究竟需要说什么(或者我如何为自己确定)?
  • 我错过了一个步骤或配置吗?

1 个答案:

答案 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在水豚自述文件中。