2016-07-07 38 views
0

In meiner Datei dances.html.erb, mein Test Interpretieren beschwert zu laden, bevor:Wie Skripte zwingen, html in Rails Capybara JS testet

Failures: 

    1) Creating dances creates a new dance with non-javascript data 
    Failure/Error: visit '/dances/new' 

    Capybara::Poltergeist::JavascriptError: 
     One or more errors were raised in the Javascript code on the page. If you don't care about these errors, you can ignore them by setting js_errors: false in your Poltergeist configuration (see documentation for details). 

     ReferenceError: Can't find variable: $ 
     ReferenceError: Can't find variable: $ 
      at http://127.0.0.1:33842/dances/new:81 in global code 

Ich denke, der HTML-Code, anstößigen sieht aus wie

<script> 

    $("#choreographer-autocomplete").autocomplete({ 
    source: <%= a_to_safe_str(Choreographer.all.map &:name) %>, 
    autoFocus: true, 
    minLength: 0 
    }); 
    $("#start-type-autocomplete").autocomplete({ 
    source: ["improper","Becket","Becket ccw","four face four","square dance","indecent"], 
    autoFocus: true, 
    minLength: 0 
    }); 
</script> 

und die beleidigende Anrufe zu "$" sind hier. Ich denke, das bedeutet, dass JQuery nicht geladen wird? Wenn ich sie schnippeln, dann wird der nächste Fehler ist:

Failure/Error: JSON.parse self.figures_json 

ActionView::Template::Error: 
    784: unexpected token at '{{toJson(figures.arr)}}' 

Diese Lenker sind eine Schräg Sache. Wird Angular auch nicht geladen?

Hier ist meine Rails application.js:

//= require angular 
//= require jquery 
//= require bootstrap-sprockets 
//= require jquery_ujs 
//= require_tree . 

//= require jquery-ui/autocomplete 
//= require angucomplete-alt 

Dies funktioniert in der realen Welt, nur nicht in diesem Test.

Gibt es etwas, was ich tun muss, um diese JS-Bibliotheken zu laden, bevor der HTML-Body ausgeführt wird?

+0

Welche Version von Phantomjs laufen Sie, und wenn Sie sagen, dass es in der realen Welt funktioniert, meinen Sie in der Entwicklungsumgebung oder in der Produktion auch? –

+0

Entwicklungsumgebung. Ich habe die Produktion nicht probiert. phantomjs (2.1.1.0) –

Antwort

1

Da Sie das neueste PhantomJS ausführen, ist die wahrscheinlichste Ursache, dass Sie einen Fehler in einer Ihrer JS-Dateien haben. Ein großer Unterschied zwischen den Entwicklungs- und Testumgebungen besteht darin, dass die Schienen in der Testumgebung alle Ihre JS-Dateien miteinander verketten. Dies bedeutet, dass ein Fehler in einer Datei verhindern kann, dass der Rest der JS verarbeitet wird. Im Dev-Modus sind sie alle getrennt, so dass ein Fehler in einem die anderen nicht daran hindert, verarbeitet zu werden. Überprüfen Sie das Protokoll Ihrer Browserkonsole auf Fehler und stellen Sie sicher, dass sie behoben sind.

+0

phantomjs (2.1.1.0) –

+0

@DaveMorse Die Antwort wurde aktualisiert, da Sie bereits ausgeführt werden 2.1.1 –

+0

Die Skripts werden ohne js-Fehler ausgeführt. Ich habe einen anderen Zweig, wo eine Variation dieser Datei unter JS-Test läuft, komplett mit Aufrufen von $() und Verwendung von {{}}, und dieser Zweig läuft gut. Frustrierend, aber ich bin mir sicher, dass ich das Ding zerbrochen habe. –