正确使用与茉莉花2的业力常识

我花了相当长的时间试图debugging这个,我想问问。 我甚至创build了一个GitHub仓库,但不会依赖它,所以在这里。 我试图利用PhantomJS的Karmatesting运行器中的CommonJS语法。 对于我的模块,我创build了我能想到的最简单的事情:

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

茉莉花testing是:

 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里面工作:我用框架创build我的karma.conf.js : jasminecommonjs 。 而且,我添加commonjs作为预处理器。

我尝试做一个karma run ,我发现它不能findglobal ,它是getJasmineRequireObj中getJasmineRequireObj的一部分,它声明了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'] 

为了好的措施,这里是我的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”表示要遍历所有的子目录(可能是过度杀毒),其中包括具有jasmine-core / jasmine.js的node_modules

所以我可以让我的预处理器更具体(最佳实践):

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

但作为一个testing,看看是否有其他文件会给我一个问题,我试过:

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

而且,一切都运作良好。 底线。 不要通过commonjs预处理器来处理jasmine.js!