正确使用karma-commonjs与Jasmine 2

时间:2015-06-27 22:02:01

标签: node.js jasmine phantomjs karma-runner karma-jasmine

我花了相当多的时间试图调试这个,并且我想问一下。我甚至创建了一个GitHub repository,但不会依赖它,所以这里有。我正在尝试使用PhantomJS在Karma测试运行器中利用CommonJS语法。对于我的模块,我创建了一个我能想到的最简单的东西:

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.jsjasminecommonjs。并且,我添加commonjs作为预处理器。

我尝试karma run,但我发现global无法找到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'] 的一部分,"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

命令行输出有点难读,但这里是:

greater_less_equal_5

这里的好处是我的packages.json中的devDependencies:

5

我不确定为什么我找不到if。任何帮助将不胜感激!!! :)

1 个答案:

答案 0 :(得分:4)

好像我的整个问题都归结为karma.conf.js中的一行(未在我原来的问题中显示:

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

出于某种原因,jasmine.js不喜欢被commonjs预处理,并且“** / * .js”表示要遍历所有子目录(这可能是过度杀伤),包括具有茉莉花的node_modules-芯/ jasmine.js

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

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

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

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

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