2017-07-27 2 views
0

Mit den Puffing Billy instructions for rspec with capybara I einen einfachen Test erstellt in Fehlern führen eine Anforderung unter Verwendung der :poltergeist_billy Treiber Stummel:Puffing Billy mit Poltergeist Fehlern: "rack-Test erfordert eine Zahnanwendung, aber keines war gegeben"

ArgumentError: 
     rack-test requires a rack application, but none was given 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara/rack_test/driver.rb:16:in `initialize' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara.rb:372:in `new' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara.rb:372:in `block in <top (required)>' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara/session.rb:79:in `driver' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara/session.rb:227:in `visit' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>' 
     # ./spec/scraypa_spec.rb:52:in `block (4 levels) in <top (required)>' 

mit diesem Code:

spec/spec_helper.rb

require "bundler/setup" 
require "scraypa" 
require 'billy/capybara/rspec' 

RSpec.configure do |config| 
    # Enable flags like --only-failures and --next-failure 
    config.example_status_persistence_file_path = ".rspec_status" 

    config.expect_with :rspec do |c| 
    c.syntax = :expect 
    end 

    config.include Capybara::DSL 
end 

spec/my_spec.rb:

it "should utilise capybara to download web content" do 
    #Capybara.current_driver = :poltergeist_billy 
    Capybara.javascript_driver = :poltergeist_billy 
    proxy.stub('http://www.google.com/') 
     .and_return(:text => "test response") 
    visit "http://www.google.com/" 
    expect(page.text).to eq('test response') 
end 

Während um zu graben, fand ich ein Beispiel, das Capybara.current_driver = :poltergeist_billy verwendet (was ich oben in meinem Test kommentiert out), wenn ich diesen Code Kommentar-, ich dann diesen Fehler:

Cliver::Dependency::NotFound: 
     Could not find an executable ["phantomjs"] on your path. 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/cliver-0.3.2/lib/cliver/dependency.rb:143:in `raise_not_found!' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/cliver-0.3.2/lib/cliver/dependency.rb:116:in `detect!' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/cliver-0.3.2/lib/cliver.rb:24:in `detect!' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.9.0/lib/capybara/poltergeist/client.rb:36:in `initialize' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.9.0/lib/capybara/poltergeist/client.rb:14:in `new' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.9.0/lib/capybara/poltergeist/client.rb:14:in `start' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.9.0/lib/capybara/poltergeist/driver.rb:42:in `client' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.9.0/lib/capybara/poltergeist/driver.rb:25:in `browser' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/poltergeist-1.9.0/lib/capybara/poltergeist/driver.rb:95:in `visit' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara/session.rb:227:in `visit' 
     # /home/resrev/.rvm/gems/ruby-2.3.1/gems/capybara-2.4.4/lib/capybara/dsl.rb:51:in `block (2 levels) in <module:DSL>' 
     # ./spec/scraypa_spec.rb:52:in `block (4 levels) in <top (required)>' 

Ich bin nicht sicher Wohin gehe ich von hier oder was mache ich falsch, irgendwelche Ideen? Vielen Dank.

Antwort

1

Die Fehler viele hier sind wir also am Anfang

  1. Sie haben noch require capybara/rails in Ihrem spec_helper.rb oder rails_helper.rb beginnen gerade - https://github.com/teamcapybara/capybara#setup - das bedeutet Capybara.app nicht ist Das Set-Up ist der Grund, warum Sie den "Rack-Test benötigen eine Rack-Anwendung" erhalten - natürlich wollen Sie nicht wirklich den rack-test Treiber für Ihren aktuellen Test verwenden, den # 3 behandeln wird.

  2. Capybara enthält Capybara :: DSL bereits in Feature-Spezifikationen. Verwenden Sie daher Feature-Spezifikationen und entfernen Sie die include Capybara::DSL aus Ihrer oben angegebenen RSpec-Konfiguration. Dies erfordert entweder Spec-Datei in spec/features/my_spec.rb setzen und damit die RSpec Config Testtyp von Verzeichnis, um zu bestimmen, oder der Angabe von Hand, dass der Test ein Feature spec

    feature "should utilise capybara to download web content" do 
        ... 
    end 
    

    oder

    it "should utilise capybara to download web content", type: :feature do 
        ... 
    end 
    
  3. Ihr Test ist tatsächlich mit dem rack_test Treiber und nicht der poltergeist-billy Treiber. Dies liegt daran, dass Sie Capybara.javascript_driver innerhalb des Tests einstellen. Es muss vor dem Test festgelegt werden, und dann wird der Test mit Metadaten versehen, um ihn zu veranlassen, den spezifischen Treiber zu verwenden. Zwei Optionen hier, entweder eingestellt Capybara.javascript_driver = :poltergeist_billy in Ihrem spec_helper.rb und geben Sie dann :js Metadaten

    feature "should utilise capybara to download web content", :js do 
        ... 
    end 
    

    oder :driver Metadaten angeben, um festzustellen, welche Treiber für den gegebenen Test zu verwenden

    feature "should utilise capybara to download web content", driver: :poltergeist_billy do 
        ... 
    end 
    
  4. Bei der Angabe zu verwenden poltergeist mit billy du musst PhantomJS (benötigt von Poltergeist) in deinem pfad installieren. Wenn OSX mit mit Homebrew können Sie brew install phantomjs tun - auf anderen Systemen müssen Sie die neueste Version von PhantomJS zum Herunterladen und legte es irgendwo in Ihrer PATH

  5. expect(page.text).to eq('test response'). Dies ist eine schreckliche Art, Textpassungen bei der Verwendung von Capybara vorzunehmen. hat kein Warte-/Wiederholungsverhalten und da Aktionen keine Garantie auf Vollständigkeit haben, wenn Capybaras-Methoden zurückkehren, führt dies zu flockigen Tests. Verwenden Sie stattdessen die Matcher Capybara bietet. Wenn Sie mit einem Teil Spiel in Ordnung sind tun

    expect(page).to have_text('test_response')

    wenn es eine genaue Übereinstimmung

    expect(page).to have_text('test_response', exact: true)

sein muss
Verwandte Themen