2014-06-25 19 views
8

Ich habe einen RSpec-Integrationstest, der etwas JavaScript ausführen muss. Ich habe Poltergeist enthalten und PhantomJS installiert, aber wenn ich das Beispiel laufen, bekomme ich diesen Fehler:Wie konfiguriere ich Capybara für die Arbeit mit Poltergeist?

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

Die Spezifikation ist:

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 

Ich denke, das Problem ist, dass ich Ich bin mir nicht sicher, wie ich darauf hinweisen soll, dass Capybara Poltergeist als seinen JavaScript-Treiber verwenden sollte. Die Poltergeist documentation sagt:

Installation

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

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

Aber es sagt nicht, welche Datei speziell sollte es in gehen. Es 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 

Aber es ist mir nicht klar, ob oder wann ich würde das in meinen Tests müssen aufzunehmen. Und ich bin mir nicht sicher, wo ich es hinstellen soll, wenn es nötig ist.


Was fehlt mir?

  • Wo muss ich die Konfiguration für Capybara und Poltergiest setzen, und was genau braucht, es zu sagen (oder wie kann ich feststellen, für mich das)?
  • Gibt es einen Schritt oder eine Konfiguration, die ich verpasst habe?

Antwort

11

Versuchen Sie js: true in Ihre Beschreibung Zeile setzen. Ich weiß, dass ich dies für Feature-Spezifikationen auf einer App bei der Arbeit tun musste:

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

Ich sehe keine andere Konfiguration für sie. War vor einer Weile, wenn ich es einrichten :)

Sie können die Capybara-Treiber-Konfigurationsmethoden rufen Sie einfach einmal vor Ihrem RSpec.configure Block:

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| 

Auch sicher sein Abschneiden nicht Transaktion mit Datenbank-Cleaner verwenden . Poltergeist läuft auf einem separaten Thread, so dass Sie wahrscheinlich seltsame Probleme mit der Datenbank haben, wenn Sie Transaktionen verwenden.

bearbeiten

Ah die wahre Sache js unter hier erwähnt: https://github.com/jnicklas/capybara#using-capybara-with-rspec in der Capybara readme.