2014-06-25 33 views
8

Ho un test di integrazione RSpec che deve eseguire alcuni JavaScript. Ho incluso Poltergeist e PhantomJS installato, ma ogni volta che ho eseguito l'esempio, ottengo questo errore:Come configurare Capybara per funzionare con Poltergeist?

Failure/Error: page.execute_script("$('form')[0].submit();") 
Capybara::NotSupportedByDriverError: 
    Capybara::Driver::Base#execute_script 

La specifica è:

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 

Credo che il problema è che io' Non sono sicuro di come indicare che Capybara dovrebbe usare Poltergeist come suo driver JavaScript. Il Poltergeist documentation dice:

Installation

Add poltergeist to your Gemfile, and in your test setup add:

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

Ma non dice quale file specifico si dovrebbe andare in. E 'also says:

Customization

You can customize the way that Capybara sets up Poltegeist via the following code in your test setup:

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

Ma non è chiaro per me se o quando avrei avuto bisogno di includere questo nel mio test. E ancora, non sono sicuro di dove metterlo se ne ho bisogno.


Cosa mi manca?

  • Dove ho bisogno di mettere la configurazione per Capybara e Poltergeist, e che cosa esattamente ne ha bisogno di dire (o come posso stabilire che per me)?
  • C'è un passaggio o una parte di configurazione che ho perso?

risposta

11

Prova a inserire js: true nella riga descrittiva. So che dovevo farlo per le specifiche delle funzioni su un'app al lavoro:

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

Non vedo altre configurazioni per questo. Era qualche tempo fa, quando ho impostato :)

si può chiamare i metodi del driver di configurazione Capybara una volta prima di tuo blocco RSpec.configure:

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| 

anche essere sicuri di utilizzare il troncamento non transazione con più pulita del database . Poltergeist viene eseguito su un thread separato, pertanto è probabile che si verifichino problemi di db strani se si utilizza transazionale.

Modifica

Ah i JS cosa vera è menzionata sotto qui: https://github.com/jnicklas/capybara#using-capybara-with-rspec nel readme capibara.