2014-10-30 61 views
0

我有一個簡單的測試,它必須在使用karma和requirejs的webstorm中工作。Requirejs不會爲使用karma的模塊添加「.js」

問題是,由於某些原因,requirejs不會爲我加載測試的模塊添加「.js」。因此墜毀試圖加載 「../ts/mamats/mama」,而 「../ts/mamats/mama.js」 存在

測試(main.jasmine.js):

define(["require", "exports", "../ts/mamats/mama"], function(require, exports, mama) { 
    describe("first test", function() { 
     it("should be true", function() { 
      var object = new mama.block(); 
      expect(object instanceof mama.block).toBe(true); 
     }); 
    }); 
}); 
//# sourceMappingURL=main.jasmine.js.map 

當我用「../ts/mamats/mama.js」替換「../ts/mamats/mama」時,每件事都能正常工作

sourceMappingURL在這裏是因爲從typeScript源文件生成的javaScript文件,我無法爲模塊手動添加「.js」

測試從此入口點開始(main-test.js):

var tests = Object.keys(window.__karma__.files).filter(function (file) { 
    return (/\.jasmine\.js$/).test(file); 
}); 
requirejs.config({ 
    baseUrl: '/base', 
    deps: tests, 
    callback: window.__karma__.start 
}); 

爲什麼requirejs不在模塊中添加「.js」?

噶的conf文件:

module.exports = function(config) { 
    config.set({ 
    basePath: '../', 
    frameworks: ['jasmine', 'requirejs'], 
    files: [ 
     'static-tests/main-test.js', 
     { pattern: 'static/**/*', included: false }, 
     { pattern: 'static-tests/**/*', included: false } 
    ], 
    exclude: [], 
    preprocessors: {}, 
    reporters: ['progress'], 
    port: 9876, 
    colors: true, 
    logLevel: config.LOG_INFO, 
    autoWatch: false, 
    browsers: ['Chrome'], 
    singleRun: false 
    }); 
}; 
+0

看起來像解決方案在這裏:https://github.com/karma-runner/karma-requirejs/issues/3 明天會嘗試。 – user1338054 2014-10-30 16:49:35

回答

1

它看起來像在require.js

問題麻煩的是在明年: 1.當出現DEPS絕對路徑 - requirejs停止添加「的.js」對任何需要打電話 2.當在deps出現文件擴展名,出於某種原因requirejs再次停止添加「.js」爲模塊

其他解決方案在這裏 - 取代bathUrl並將其添加到requirejs conf不幫助。

對於我的解決方案是未來:

var tests = Object.keys(window.__karma__.files).filter(function (file) { 
    return (/\-jasmine\.js$/).test(file); 
}).map(function (file) { 
    return file.replace(/^\/|\.js$/g, ''); 
}); 

baseUrl: '', 

爲requirejs.conf

,我不知道爲什麼requirejs還添加 「/基地」,爲所有網址請求,但現在所有工作正常

1

這裏是一個如何RequireJs一個有趣的閱讀處理這個問題:

http://requirejs.org/docs/api.html#jsfiles

閱讀,使得它看起來像RequireJS的問題,但似乎有對是否是真實的一些辯論。無論如何,這個gist似乎解決了這個問題。

var tests = Object.keys(window.__karma__.files).filter(function (file) { 
    return /\.spec\.js$/.test(file); 
}).map(function(file){ 
    return file.replace(/^\/base\/src\/js\/|\.js$/g,''); 
}); 

require.config({ 
    baseUrl: '/base/src/js' 
}); 

require(tests, function(){ 
    window.__karma__.start(); 
}); 
+0

不適合我,請添加有助於我自己發現的解決方案。 – user1338054 2014-10-31 17:03:14