在 Jasmine 2 中正确使用 karma-commonjs
Proper use of karma-commonjs with Jasmine 2
我花了相当多的时间来调试这个,我想我会问。我什至创建了一个 GitHub repository 但不会依赖它,所以就这样吧。我正在尝试使用 PhantomJS 在 Karma 测试 运行ner 中利用 CommonJS 语法。对于我的模块,我创建了我能想到的最简单的东西:
exports.returnYes = function() {
return "Yes";
};
Jasmine 测试是:
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 内工作:
我使用以下框架创建 karma.conf.js:jasmine
、commonjs
。而且,我添加 commonjs
作为预处理器。
我尝试做一个 karma run
,但我发现它找不到 global
,它是 jasmine.js 中 getJasmineRequireObj
的一部分,它声明 [=24] =]
命令行输出有点难读,但这里是:
$ 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']
我的 packages.json:
中的 devDependencies 是很好的衡量标准
"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
。任何帮助将不胜感激!!! :)
似乎我的整个问题都归结为 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'],
},
而且,一切正常。底线。不要通过commonjs预处理器处理jasmine.js!
我花了相当多的时间来调试这个,我想我会问。我什至创建了一个 GitHub repository 但不会依赖它,所以就这样吧。我正在尝试使用 PhantomJS 在 Karma 测试 运行ner 中利用 CommonJS 语法。对于我的模块,我创建了我能想到的最简单的东西:
exports.returnYes = function() {
return "Yes";
};
Jasmine 测试是:
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 内工作:
我使用以下框架创建 karma.conf.js:jasmine
、commonjs
。而且,我添加 commonjs
作为预处理器。
我尝试做一个 karma run
,但我发现它找不到 global
,它是 jasmine.js 中 getJasmineRequireObj
的一部分,它声明 [=24] =]
命令行输出有点难读,但这里是:
$ 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']
我的 packages.json:
中的 devDependencies 是很好的衡量标准"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
。任何帮助将不胜感激!!! :)
似乎我的整个问题都归结为 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'],
},
而且,一切正常。底线。不要通过commonjs预处理器处理jasmine.js!