Как настроить Capybara для работы с Poltergeist?

у меня есть тест интеграции RSpec, который должен выполнить некоторый JavaScript. Я включил 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. The документация полтергейст говорит:

установка

добавьте полтергейст в свой Gemfile, и в вашей тестовой установке добавьте:

require 'capybara/poltergeist'
Capybara.javascript_driver = :poltergeist

но он не говорит, в какой именно файл он должен войти. Это и говорит:

настройки

можно настроить так, что капибара устанавливает Poltegeist через следующий код в настройках тест:

Capybara.register_driver :poltergeist do |app|
  Capybara::Poltergeist::Driver.new(app, options)
end

но мне неясно, нужно ли или когда мне нужно будет включить это в мои тесты. И снова я ... не знаю, куда его положить, если понадобится.


что я упустил?

  • где мне нужно поместить конфигурацию для Capybara и Poltergiest, и что именно нужно сказать (или как я могу определить это для себя)?
  • есть ли шаг или часть конфигурации, которую я пропустил?

1 ответов


положить js: true в вашей строке описания. Я знаю, что мне пришлось сделать это для спецификаций функций в приложении на работе:

describe "Signup", :type => :feature, :js => true do

Я не вижу никакой другой конфигурации. Было некоторое время назад, когда я его установил:)

вы можете просто вызвать методы конфигурации драйвера Capybara один раз перед вашим RSpec.настроить блок:

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|

также обязательно используйте усечение, а не транзакцию с Database cleaner. Poltergeist работает в отдельном потоке, поэтому у вас, вероятно, будет странная БД при использовании транзакций.

редактировать

Ах, истинная вещь js упоминается здесь:https://github.com/jnicklas/capybara#using-capybara-with-rspec в капибаре читай.