2017-07-19 6 views
1

Ich verwende in meiner Anwendung Datentabellen, und die Datensätze werden von Ajax in die Tabelle geladen. Jetzt schreibe ich Tests für die Seite meiner Datentabelle und muss warten, bis die Datensätze geladen sind. Ich habe Capybara Webkit konfiguriert und js: true in meinen Test aufgenommen. aber wenn ich den Test ausführen bekomme ich diese FehlerCapybara Webkit ignorieren ActionController :: RoutingError

Failure/Error: raise ActionController::RoutingError, "No route matches [#{env['REQUEST_METHOD']}] #{env['PATH_INFO'].inspect}" 

ActionController::RoutingError: 
     No route matches [GET] "/images/sort_both.png" 

In meinem Browser ich die Konsole überprüft, und ich habe nicht diese Fehler, werden alle Bilder gefunden.

das ist meine Konfiguration von Webkit

Capybara.javascript_driver = :webkit 

Capybara::Webkit.configure do |config| 
    config.raise_javascript_errors = false 
end 

Ich verwende wait_for_ajax Methode

def wait_for_ajax 
    Timeout.timeout(Capybara.default_max_wait_time) do 
    loop do 
     active = page.evaluate_script('jQuery.active') 
     break if active == 0 
    end 
    end 
end 

und dies ist mein Test

scenario 'check pending contributions', js: true do 
    login_as analyst, scope: :analyst 

    visit '/analyst/contributions' 

    wait_for_ajax 
    expect(page).to have_content "#{contribution.user_name}" 
    end 

Und nun möchte ich diese Routing beheben Fehler, oder einfach ignorieren, weil ich nur die Logik testen möchte, nicht js Fehler.

Antwort

0

Dieser Fehler ist kein JS-Fehler, es ist ein Fehler, der von Ihrem Server ausgelöst wird, wenn ein Asset angefordert wird. Sie können Ihren Test wahrscheinlich dazu veranlassen, den Fehler zu ignorieren, indem Sie Capybara.raise_server_errors = false festlegen. Die bessere Lösung wäre jedoch, Ihre Asset-Pipeline so zu reparieren, dass alle Assets in der Testumgebung korrekt bedient werden. Wahrscheinlich haben Sie zuvor die Assets in der Testumgebung vorkompiliert und eine übriggebliebene Manifestdatei verhindert, dass neu hinzugefügte Assets neu kompiliert werden. Sie können das Problem beheben, indem zusätzlich etwas wie

RAILS_ENV=test rake assets:clobber 

ausgeführt wird, den #{contribution.user_name} Text unter der Annahme, wird über den Ajax-Aufruf geladen gibt es keine Notwendigkeit für den seit have_contentwait_for_ajax Methodenaufruf ist bereits/Neuversuch warten.

+0

danke für die Antworten, löste es mein Problem von ActionController :: RoutingError, aber mein Test funktioniert nicht. Meine Tabelle wird nicht ausgefüllt/Capybara wartet nicht im Test, so dass "# {contribution.user_name}" nicht gefunden wird. Aber danke für die nette und präzise Antwort. –

+0

@MatheusMendes Ihr Test funktioniert nicht, ist ein anderes Problem, Sie können versuchen, 'Capybara.default_max_wait_time' zu ​​erhöhen, falls es nicht lange genug auf die Antwort wartet. Wahrscheinlicher ist, dass Sie die Datensätze nicht erstellt haben, die in den Tests zurückgegeben werden (entweder durch Nicht-Ausführung oder durch Verwenden von "let", was "Beiträge" erzeugt, so dass es nicht in der DB ist, wenn Sie die Ajax-Ergebnisse erhalten) Sie haben den Transaktionstest nicht deaktiviert und setup_cleaner so eingerichtet, dass die Datensätze tatsächlich sowohl in den Test- als auch in den App-Threads verfügbar sind. Aber das ist wirklich eine separate Frage von diesem –

+0

Danke für die Antwort @thomas, ich bin getestet, dass der Datensatz mit Hilfe von Pry erstellt wird, verwende ich lassen! Das erstellt die Datensätze am Anfang. Alle meine anderen Tests funktionieren so, dass meine Transaktionsprüfung eines Datenbank-Cleaners in Ordnung ist. Wird eine weitere Frage mit mehr Details posten, danke. –

Verwandte Themen