2013-05-13 11 views
6

Bei der Verwendung der Karma Javascript-Test-Bibliothek (geb. Testacular) zusammen mit Rails, wo sollten Testdateien und mocked Daten platziert werden?Karma + Rails: Dateistruktur?

Es scheint komisch, sie in/assets/zu haben, weil wir sie eigentlich nicht für Benutzer bereitstellen wollen. (Aber ich denke, wenn sie einfach nie vorkompiliert werden, dann ist das kein wirkliches Problem, richtig?)

Antwort

3

Wir landeten Tests und verspotteten Daten unter dem spec Ordner der Rails App und konfigurierten Karma, um sie ebenso wie unsere getesteten zu importieren Code von app/assets.

Funktioniert für uns. Andere Gedanken sind willkommen.

Unsere config/karma.conf.js Datei:

basePath = '../'; 

files = [ 
    JASMINE, 
    JASMINE_ADAPTER, 

    //libs 
    'vendor/assets/javascripts/angular/angular.js', 
    'vendor/assets/javascripts/angular/angular-*.js', 
    'vendor/assets/javascripts/jquery-1.9.1.min.js', 
    'vendor/assets/javascripts/underscore-min.js', 
    'vendor/assets/javascripts/angular-strap/angular-strap.min.js', 
    'vendor/assets/javascripts/angular-ui/angular-ui.js', 
    'vendor/assets/javascripts/angular-bootstrap/ui-bootstrap-0.2.0.min.js', 

    //our app! 
    'app/assets/javascripts/<our-mini-app>/**', 

    // and our tests 
    'spec/javascripts/<our-mini-app>/lib/angular/angular-mocks.js', 
    'spec/javascripts/<our-mini-app>/unit/*.coffee', 
    // mocked data 
    'spec/javascripts/<our-mini-app>/mocked-data/<data-file>.js.coffee', 
]; 

autoWatch = true; 

browsers = 'PhantomJS'.split(' ') 

preprocessors = { 
    '**/*.coffee': 'coffee' 
} 
+0

Ich erstellte einen Ordner/spec/angular, wo ich jede Testdatei, mit/spec/eckig/e2e,/spec/eckig/Einheit, etc ... Aber wie hast du die karma.conf.js? Ich bin nicht sicher, ob das Proxiesattribut richtig ist: 'proxies = { '/': 'http: // localhost: 3000 /' };' Ich habe Fehler, sogar einen einfachen Test zu laufen, es ist wie Javascript Zu testende Quellen sind nicht enthalten. – p1nox

+0

PD: Ich arbeite mit Legacy-Code, der application.js.erb als Manifest für alle Javascript-Dateien verwendet, auch eckige Anwendung, in meiner karma.conf.js habe ich 'files = [ ANGULAR_SCENARIO, ANGULAR_SCENARIO_ADAPTER, '. ./../app/assets/javascripts/application.js ', ' */* Spec.js ' ]; ' – p1nox

+0

BTW Ich teste, ob ein Modul namens" StSelector "da ist und es funktioniert (http: //www.yearofmoo.com/2013/01/full-spectrum-testing-with-angularjs-and-testacular.html#testing-modules), und ich bekomme 'Midway: Testing Module StSelector Module: sollte registriert werden FAILED \t Fehler: Kein Modul: StSelector' – p1nox

8

Über diesen Beitrag: https://groups.google.com/forum/#!topic/angular/Mg8YjKWbEJ8

ich bin etwas zu experimentieren, die wie folgt aussieht:

// list of files/patterns to load in the browser 
files: [ 
    'http://localhost:3000/assets/application.js', 
    'spec/javascripts/*_spec.coffee', 
    { 
    pattern: 'app/assets/javascripts/*.{js,coffee}', 
    watched: true, 
    included: false, 
    served: false 
    } 
], 

Es Uhren App js-Dateien, aber doesn Ich nehme sie nicht mit, oder diene ihnen, sondern schließe die Anwendung ein, die von Schienen und Ritzeln bedient wird.

Ich habe auch mit https://github.com/lucaong/sprockets-chain fiedeln, aber habe keine Möglichkeit gefunden, requirejs zu verwenden, um js-Dateien innerhalb von Gems einzuschließen (wie jquery-rails oder angularjs-rails).

+0

Das scheint eine gute Lösung zu sein. Ich denke, es ist ein bisschen langsamer als die Lösung @ alan-h schlägt jedoch vor. – opsb

+1

Ich mochte diese Lösung. Es behebt das Problem beim Laden von Dateien mit .js.erb. – Adrian

+0

Das macht Sinn. –