Правильное использование кармы с жасмином 2
Я потратил немало времени, пытаясь отладить это, и подумал, что я спрошу. Я даже создал GitHub-репозиторий, но не буду полагаться на него, так что здесь. Я пытаюсь воспользоваться синтаксисом CommonJS в тестере Karma, используя PhantomJS. Для своего модуля я создал простейшую вещь, о которой я мог подумать:
exports.returnYes = function() {
return "Yes";
};
Тест Жасмин это:
var returnYes = require("../js/returnYes").returnYes;
describe("returnYes", function() {
it("should return Yes", function() {
expect(returnYes()).toBe("Yes");
});
});
И если я сделаю jasmine init
Я могу запустить его из командной строки благодаря jasmine-npm
просто набрав jasmine
с выходом:
$ jasmine
Started
.
1 spec, 0 failures
Finished in 0.003 seconds
Теперь, чтобы попытаться заставить его работать внутри кармы: я создаю свой karma.conf.js с фреймворками: jasmine
,commonjs
, И я добавляю commonjs
в качестве препроцессора.
Я пытаюсь сделать karma run
и я считаю, что он не может найти global
которая является частью getJasmineRequireObj
в jasmine.js, где он объявляет jasmineGlobal = global;
Вывод командной строки немного сложен для чтения, но вот он:
$ 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']
В качестве примера можно привести devDependencies в моих пакетах.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"
}
Я не уверен, почему я не могу найти global
, Любая помощь будет принята с благодарностью!!!:)
1 ответ
Кажется, что вся моя проблема сводится к строке в karma.conf.js (не показано в моем исходном вопросе:
preprocessors: {
'**/*.js': ['commonjs']
},
По какой-то причине jasmine.js
не радует предварительная обработка commonjs, и "**/*.js" говорит, что нужно пройти через все подкаталоги (что, вероятно, излишне), включая node_modules, в которых есть jasmine-core/jasmine.js
Так что я могу сделать свой препроцессор более конкретным (лучшая практика):
preprocessors: {
'spec/*.js': ['commonjs'],
'js/*.js': ['commonjs']
},
но в качестве теста, чтобы увидеть, могут ли какие-либо другие файлы вызвать у меня проблему, я попытался:
preprocessors: {
'**/!(jasmine).js': ['commonjs'],
},
И все работало так же. Нижняя линия. Не обрабатывайте jasmine.js через препроцессор commonjs!