如我們所知,在配置文件中使用RequireJS時,我們必須定義'路徑'和'填充'。在編寫測試(Karma,Jasmine)時,我們需要爲RequireJS創建一個額外的配置文件並重新定義相同的數據。將包含來自AngularJS應用程序的模塊的文件包含到Karma的RequireJS配置文件中
我嘗試提取公共部分並動態加載它們。在Angular JS應用程序中,一切都沒有問題,但在測試中,我總是出現錯誤'404'。但讓我們開始吧。簡單示例結構:
.
|-- newApp
| |-- app
| | `-- app.require.js
| |-- newApp.require.js
| `-- index.html
`-- test
|-- test.karma.js
`-- test.require.js
的index.html負載RequireJS配置文件
<script data-main="newApp.require.js" src="bower_components/requirejs/require.js"></script>
newApp.require.js初始化RequireJS
require([
'app/app.require'
], function (appRequire) {
"use strict";
require.config({
baseUrl: 'app',
paths: appRequire.paths,
shim: appRequire.shim,
deps: [
'NewAppBootstrap'
]
});
});
app.require.js帶路徑和墊片的模塊/對象
define([
'some/others/components.require'
], function (componentsRequire) {
"use strict";
var appRequire = {
'NewApp': 'app.module',
'NewAppBootstrap': 'app.bootstrap',
'NewAppRoute': 'app.routes'
};
var vendorRequire = {
'jQuery': {
exports: '$'
},
'angular': {
exports: 'angular'
}
};
return {
paths: Object.assign(
appRequire,
componentsRequire
),
shim: vendorRequire
};
});
到目前爲止一切正常。現在我想將app.require.js加載到test.require.js。而問題開始......
test.require.js
var TEST_REGEXP = /(spec|test)\.js$/i;
var allTestFiles = [];
Object.keys(window.__karma__.files).forEach(function (file) {
'use strict';
if (TEST_REGEXP.test(file)) {
var normalizedTestModule = file.replace(/^\/base\/|\.js$/g, '');
allTestFiles.push(normalizedTestModule);
}
});
require([
'app/app.require'
], function (appRequire) {
"use strict";
require.config({
baseUrl: '/base/newApp',
waitSeconds: 200,
paths: appRequire.paths,
shim: appRequire.shim,
deps: allTestFiles,
callback: window.__karma__.start
});
});
不幸的是,我仍然有錯誤:
WARN [web-server]: 404: /app/app.require.js
PhantomJS 2.1.1 (Linux 0.0.0) ERROR: 'There is no timestamp for app/app.require.js!'
PhantomJS 2.1.1 (Linux 0.0.0) ERROR
Error: Script error for "app/app.require"
http://requirejs.org/docs/errors.html#scripterror at node_modules/requirejs/require.js:143
我嘗試了不同的路徑,但仍然一無所獲。有誰知道如何加載這個文件?在這個地方是否有可能加載文件?我會很感激任何提示。
你試圖改變的路徑:'。 。/ newApp/app/app.require' – Andonaeus
當然,我也嘗試過:app.require,app/app.require,newApp/app/app.require,../newApp/app/app.application.require。即使與/基地,但錯誤仍然是一樣的...... – FpDev
也許這裏的答案可以有所幫助? http://stackoverflow.com/questions/20733090/karma-error-there-is-no-timestamp-for – Andonaeus