Klassen, die in CoffeeScript definiert sind, die nicht von Jasminspezifikationen gefunden wurden
-
25-10-2019 - |
Frage
Ich baue ein Backbone.js-App auf einem Back-End-Schienen 3.1. Ich verwende CoffeeScript, um die Backbone-Klassen zu schreiben, und Jasmine (über Jasmine-Headless-Webkit) zum Testen.
Angesichts des folgenden (teilweisen) Baumes:
.
├── app
│ ├── assets
│ │ ├── javascripts
│ │ │ └── views
│ │ │ ├── avia_view.js.coffee
├── spec
│ ├── javascripts
│ │ └── views
│ │ └── avia_view_spec.js.coffee
... Ich würde erwarten avia_view_spec.js.coffee
wissen von Avia.AviaView
, was in definiert ist in avia_view.js.coffee
.
Ich bekomme jedoch die folgende Ausgabe vom Laufen bundle exec jasmine-headless-webkit
:
Running Jasmine specs...
F
Avia.AviaView render creates a new MatricesView . (/home/duncan/avia/spec/javascripts/views/avia_view_spec.js.coffee:10)
ReferenceError: Can't find variable: Avia in /home/duncan/avia/spec/javascripts/views/avia_view_spec.js.coffee (line ~5)
ReferenceError: Can't find variable: Avia in /home/duncan/avia/spec/javascripts/views/avia_view_spec.js.coffee (line ~10)
Mein jasmine.yml
Enthält Folgendes:
src_files:
- public/javascripts/prototype.js
- public/javascripts/effects.js
- public/javascripts/controls.js
- public/javascripts/dragdrop.js
- public/javascripts/application.js
- public/javascripts/**/*.js
ich denken Ich muss Jasmine sagen, dass er den Inhalt von laden soll avia_view.js.coffee
Aber ich bin mir nicht ganz sicher, wie. Hinzufügen einer expliziten Referenz in der src_files
Abschnitt in jasmine.yml
Scheint keinen Unterschied zu machen ...
Könnte mir bitte jemand sagen, was ich hier falsch mache? Ich vermute, es ist etwas Einfaches ...
Lösung
Ohne viel von Ihrem Code gesehen zu haben, würde ich vermuten, dass Coffeescripts Funktionswickeln (Dokumente). Sie müssen sicherstellen, dass alle Symbole, die Sie verwenden möchten, zu einem Ort exportiert werden, an dem Sie sie erreichen können (hier ist eine gründliche Diskussion darüber).
Bearbeiten: Hier ist Eine weitere langjährige und theoretische, aber gute Dokumentation zu diesem Thema.
Andere Tipps
Versuchen Sie, dies zu Ihrem hinzuzufügen avia_view.js.coffee
(exports ? this).Avia = Avia
Sehen Dies Für eine detaillierte Erklärung.
Alternativ versuchen Sie es Dies;
window.Avia = Avia
Wir haben das gleiche Problem gestoßen; Ich empfehle sehr Jasmin Reis