2017-06-07 4 views
1

In einer Rails-App verwende ich RSpec (mit Capybara Webkit), um zu testen, dass ein Löschen-Link funktioniert.Undefinierte Methode accept_modal für Capybara :: Webkit :: Treiber

In meiner Rails-Vorlage habe ich:

<%= link_to 'Delete', movie_path(@movie), 
         method: :delete, data: { confirm: 'Are you sure?' } %> 

Und das ist meine spec:

require 'rails_helper' 

describe "Deleting a movie", js: true do 
    it "destroys the movie and shows the movie listing without the deleted movie" do 
    movie = Movie.create(movie_attributes) 

    visit movie_path(movie) 

    page.accept_confirm do 
    click_link 'Delete' 
    end 

    expect(current_path).to eq(movies_path) 
    expect(page).not_to have_text(movie.title) 
    end 
end 

ich den Fehler:

NoMethodError: 
    undefined method `accept_modal' for #<Capybara::Webkit::Driver:0x007febc2214908> 

Es ist der richtige Treiber (Webkit) aber es scheint nicht zu accept_modal (die von page.accept_confirm aufgerufen werden muss) zu finden.

Ich verwende:

capybara (2.14.0) 
capybara-webkit (1.1.0) 
rails (5.1.1) 
rspec (3.6.0) 
rspec-rails (3.6.0) 

Beachten Sie, dass die folgende Verwendung funktioniert:

click_link 'Delete' 
page.driver.browser.accept_js_confirms 

Aber ich würde gerne verstehen, warum accept_confirm nicht.

Antwort

0

Das Capybara-Webkit, das Sie verwenden, ist massiv veraltet (1.1.0 wurde im Dezember 2013 veröffentlicht), unterstützt nicht die einheitliche Capybara Modal API (es gab keine Capybara-Webkit 1.1.0 wurde veröffentlicht) und hat seine Treiberklasse nicht von Capybara :: Driver :: Base abgeleitet, so dass Sie nicht den "NotSupportedByDriverError" bekommen, den Sie heutzutage bekommen würden, wenn ein Feature noch nicht implementiert/unterstützt von einem Treiber - Update auf das neueste capybara-webkit (möglicherweise müssen Sie den Master-Zweig verwenden, wenn Sie Capybara 2.14.0+ verwenden möchten, andernfalls werden Sie bei Capybara 2.13.x feststecken)

Verwandte Themen