2015-06-27 3 views
5

Ich habe eine ganze Menge Zeit damit verbracht, das zu debuggen, und dachte, ich würde fragen. Ich habe sogar eine GitHub repository erstellt, aber ich werde mich nicht darauf verlassen. Ich versuche die CommonJS-Syntax innerhalb des Karma-Testlaufers mit PhantomJS zu nutzen. Für mein Modul habe ich die einfachste Sache, die mir einfiel:Richtiger Gebrauch von Karma-Commonjs mit Jasmine 2

exports.returnYes = function() { 
    return "Yes"; 
}; 

The Jasmine Test:

var returnYes = require("../js/returnYes").returnYes; 

describe("returnYes", function() { 

    it("should return Yes", function() { 
    expect(returnYes()).toBe("Yes"); 
    }); 

}); 

Und wenn ich ein jasmine init mache ich es von der Kommandozeile dank jasmine-npm laufen kann indem man einfach jasmine mit Ausgang eingeben:

$ jasmine 
Started 
. 


1 spec, 0 failures 
Finished in 0.003 seconds 

Jetzt zu versuchen und es innerhalb Karma zu arbeiten: erstelle ich meine karma.conf.js mit Gerüsten: jasmine, commonjs. Und ich füge commonjs als Präprozessor hinzu.

ich versuche, ein karma run zu tun, und ich finde, dass es nicht global finden, den Teil getJasmineRequireObj in jasmine.js ist, wo es jasmineGlobal = global;

Die Befehlszeile Ausgabe erklärt ein wenig schwer zu lesen, aber hier ist es :

$ karma run 
[2015-06-27 17:41:35.266] [DEBUG] config - Loading config /Users/zen/Projects/karma-commonjs-test/karma.conf.js 
##teamcity[enteredTheMatrix] 
##teamcity[testSuiteStarted nodeId='1' parentNodeId='0' name='karma.conf.js' nodeType='config' locationHint='config:///Users/zen/Projects/karma-commonjs-test/karma.conf.js'] 
##teamcity[testSuiteStarted nodeId='2' parentNodeId='1' name='PhantomJS 1.9.8 (Mac OS X 0.0.0)' nodeType='browser'] 
##teamcity[testStarted nodeId='3' parentNodeId='2' name='Error' nodeType='browserError'] 
##teamcity[testFailed nodeId='3' error='yes' message='ReferenceError: Can|'t find variable: global|nat http://localhost:9876/base/node_modules/jasmine-core/lib/jasmine-core/jasmine.js?68f13ab3f93af5a219b9fe8409f8763b31998bba:27'] 
##teamcity[testSuiteFinished nodeId='2'] 
##teamcity[testSuiteFinished nodeId='1'] 

Denn hier eine gute Maßnahme sind die devDependencies in meinem packages.json:

"devDependencies": { 
    "jasmine-core": "^2.3.4", 
    "karma": "^0.12.37", 
    "karma-commonjs": "0.0.13", 
    "karma-jasmine": "^0.3.5", 
    "karma-phantomjs-launcher": "^0.2.0", 
    "phantomjs": "^1.9.17" 
} 

Ich bin mir nicht sicher, warum ich global nicht finden kann. Jede Hilfe würde sehr geschätzt werden !!! :)

Antwort

4

Es scheint, wie meine ganze Problem auf der Linie kam in karma.conf.js (nicht in meiner ursprünglichen Frage gezeigt:

preprocessors: { 
    '**/*.js': ['commonjs'] 
}, 

Aus irgendeinem Grund jasmine.js nicht glücklich sein vorverarbeiteten von commonjs, und "**/*. js" sagt, durch alle Unterverzeichnisse zu gehen (was wahrscheinlich übertrieben ist), einschließlich node_module, die Jasmine-core/jasmine.js

hat Also kann ich entweder meinen Pre-Prozessor mehr machen spezifisch (beste Praxis):

preprocessors: { 
    'spec/*.js': ['commonjs'], 
    'js/*.js': ['commonjs'] 
}, 

aber als Test, um zu sehen, ob andere Dateien mir ein Problem geben würde, habe ich versucht:

preprocessors: { 
    '**/!(jasmine).js': ['commonjs'], 
}, 

Und alles so gut funktioniert. Endeffekt. Verarbeite jasmine.js nicht über commonjs preprocessor!