2015-06-27 41 views
5

我花了相當多的時間來嘗試調試這個,我想問問。我甚至創建了一個GitHub repository,但不會依賴它,所以在這裏。我試圖在PhamaomJS的Karma測試運行器中利用CommonJS語法。對於我的模塊,我創建我能想到的最簡單的事情:正確使用karma-commonjs與Jasmine 2

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這是jasmine.jsgetJasmineRequireObj部分地方宣佈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。任何幫助將不勝感激!!! :)

回答

4

好像我的整個問題歸結爲在karma.conf.js線(在我原來的問題未顯示:

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

出於某種原因,jasmine.js不開心是預處理通過commonjs和「**/*。js」說要通過所有子目錄(這可能是矯枉過正),其中包括具有茉莉花核心/ jasmine.js的node_modules

所以我可以讓我的預處理器更多具體(最佳做法):

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

但作爲一個測試,看看是否有任何其他文件會給我一個問題,我想:

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

而且,一切工作爲好。底線。不要通過commonjs預處理器來處理jasmine.js!