2015-06-27 26 views
5

Ho trascorso una discreta quantità di tempo cercando di eseguire il debug di questo e ho pensato che avrei chiesto. Ho persino creato un GitHub repository ma non ci baserò su di esso, quindi ecco qui. Sto cercando di sfruttare la sintassi CommonJS all'interno del test runner Karma utilizzando PhantomJS. Per il mio modulo ho creato la cosa più semplice che potevo pensare:Uso corretto di karma-commonjs con Jasmine 2

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

Il test Jasmine è:

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

describe("returnYes", function() { 

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

}); 

E, se faccio un jasmine init posso eseguirlo dalla riga di comando grazie a jasmine-npm semplicemente digitando jasmine con uscita:

$ jasmine 
Started 
. 


1 spec, 0 failures 
Finished in 0.003 seconds 

Ora per cercare di farlo funzionare all'interno del karma: creo il mio 0.123.762,626112 millionscon strutture: jasmine, commonjs. E, aggiungo commonjs come preprocessore.

cerco di fare un karma run e trovo che non può trovare global che fa parte del getJasmineRequireObj in jasmine.js dove dichiara jasmineGlobal = global;

L'uscita di linea di comando è un po 'difficile da leggere, ma qui è :

$ 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'] 

Per buona misura qui sono i devDependencies nella mia 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" 
} 

Non sono sicuro del motivo per cui non riesco a trovare global. Qualsiasi aiuto sarebbe molto apprezzato!!! :)

risposta

4

Sembra che tutto il mio problema è venuto giù per la linea in karma.conf.js (non mostrato nella mia domanda iniziale:

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

Per qualche ragione, jasmine.js non è felice di essere pre-trattati da commonjs, e "**/*. js" dice di passare attraverso tutte le sottodirectory (che è probabilmente eccessivo), inclusi node_modules che ha jasmine-core/jasmine.js

Quindi posso rendere il mio pre-processore più specifica (best practice):

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

ma come un test per vedere se qualsiasi altro file mi avrebbe dato un problema, ho provato:

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

E, tutto ha funzionato pure. Linea di fondo. Non elaborare jasmine.js attraverso il preprocessore commonjs!