我正在努力让我的Angular2单元测试运行起来。 我猜这与我的模块加载有关。
这是我得到的错误:
WARN [web-server]: 404:
/base/public/dev/assets/lib/node_modules/angular2/src/platform/browser/browser_adapter.js
Missing error handler on socket.
TypeError: (msg || "").replace is not a function
这是我的karma.config.js
module.exports = function(config) {
config.set({
basePath: ".",
frameworks: ["jasmine"],
files: [
// paths loaded by Karma
{ pattern: "public/dev/assets/lib/node_modules/angular2/bundles/angular2-polyfills.js", included: true, watched: true },
{ pattern: "public/dev/assets/lib/node_modules/systemjs/dist/system.src.js", included: true, watched: true },
{ pattern: "public/dev/assets/lib/node_modules/rxjs/bundles/Rx.js", included: true, watched: true },
{ pattern: "public/dev/assets/lib/node_modules/angular2/bundles/angular2.dev.js", included: true, watched: true },
{ pattern: "public/dev/assets/lib/node_modules/angular2/bundles/testing.dev.js", included: true, watched: true },
{ pattern: "karma-test-shim.js", included: true, watched: true },
// paths loaded via module imports
{ pattern: "public/dev/assets/scripts/app/**/*.js", included: false, watched: true },
// paths to support debugging with source maps in dev tools
{ pattern: "public/dev/assets/scripts/app/**/*.ts", included: false, watched: false },
{ pattern: "public/dev/assets/scripts/app/**/*.js.map", included: false, watched: false }
],
// proxied base paths
proxies: {
// required for component assests fetched by Angular"s compiler
// Redirect all "/public/" paths to "/base/public" (Karma serves files from /base/)
"/public/": "/base/public/"
},
port: 9876,
logLevel: config.LOG_INFO,
colors: true,
autoWatch: true,
browsers: ["Chrome"],
// Karma plugins loaded
plugins: [
"karma-jasmine",
"karma-coverage",
"karma-chrome-launcher"
],
// Coverage reporter generates the coverage
reporters: ["progress", "dots", "coverage"],
// Source files that you wanna generate coverage for.
// Do not include tests or libraries (these files will be instrumented by Istanbul)
preprocessors: {
"public/dev/assets/scrips/app/**/!(*spec).js": ["coverage"]
},
coverageReporter: {
reporters:[
{type: "json", subdir: ".", file: "coverage-final.json"}
]
},
singleRun: true
})
};
这是我的karma-test-shim.js
// Tun on full stack traces in errors to help debugging
Error.stackTraceLimit = Infinity;
jasmine.DEFAULT_TIMEOUT_INTERVAL = 1000;
// // Cancel Karma's synchronous start,
// // we will call `__karma__.start()` later, once all the specs are loaded.
__karma__.loaded = function() {};
System.config({
defaultJSExtensions: true,
map: {
angular2: "public/dev/assets/lib/node_modules/angular2",
rxjs: "public/dev/assets/lib/node_modules/rxjs"
},
packages: {
'base/public': {
format: 'register',
map: Object.keys(window.__karma__.files)
.filter(onlyAppFiles)
.reduce(createPathRecords, {})
}
}
});
System.import('angular2/src/platform/browser/browser_adapter')
.then(function(browser_adapter) { browser_adapter.BrowserDomAdapter.makeCurrent(); })
.then(function() { return Promise.all(resolveTestFiles()); })
.then(function() { __karma__.start(); }, function(error) { __karma__.error(error.stack || error); });
function createPathRecords(pathsMapping, appPath) {
// creates local module name mapping to global path with karma's fingerprint in path, e.g.:
// './vg-player/vg-player':
// '/base/dist/vg-player/vg-player.js?f4523daf879cfb7310ef6242682ccf10b2041b3e'
var pathParts = appPath.split('/');
var moduleName = './' + pathParts.slice(Math.max(pathParts.length - 2, 1)).join('/');
moduleName = moduleName.replace(/\.js$/, '');
pathsMapping[moduleName] = appPath + '?' + window.__karma__.files[appPath];
return pathsMapping;
}
function onlyAppFiles(filePath) {
return /\/base\/public\/dev\/assets\/(?!.*\.spec\.js$).*\.js$/.test(filePath);
}
function onlySpecFiles(path) {
return /\.spec\.js$/.test(path);
}
function resolveTestFiles() {
return Object.keys(window.__karma__.files) // All files served by Karma.
.filter(onlySpecFiles)
.map(function(moduleName) {
// loads all spec files via their global module names (e.g.
// 'base/dist/vg-player/vg-player.spec')
return System.import(moduleName);
});
}
如您所见,我将所有/public/
路径重定向到/base/public/
以处理Karma默认/base/
份文件。
我仔细检查了抛出404的文件的路径,它存在于提供的路径中(减去/base/
)。
有人能指出我在这方面可能出现的问题吗?
THX!