有几个地方提出这个解决方案:
window.addEventListener('unhandledrejection', function(err) {
window.__karma__.error(err); // yeah private API ¯\_(ツ)_/¯
});
但它抛出:
Uncaught TypeError: Cannot read property 'error' of undefined
答案 0 :(得分:1)
我可以通过以下设置获得未处理拒绝的报告:
karma.conf.js
:
module.exports = function(config) {
config.set({
basePath: '',
frameworks: ['mocha'],
files: [
'setup.js',
'test.js',
],
exclude: [],
preprocessors: {},
reporters: ['progress'],
port: 9876,
colors: true,
logLevel: config.LOG_INFO,
autoWatch: true,
browsers: ['Chrome'],
singleRun: false,
concurrency: Infinity
});
};
setup.js
:
window.addEventListener('unhandledrejection', function(ev) {
window.__karma__.error("unhandled rejection: " + ev.reason.message);
});
test.js
:
it("test 1", () => {
Promise.reject(new Error("Q"));
});
it("test 2", (done) => {
setTimeout(done, 1000);
});
不需要将setup.js
与test.js
分开。我只是希望将这些设置代码与正确的测试分开。
当我运行karma start --single-run
时,我得到:
25 01 2017 07:20:07.521:INFO [karma]: Karma v1.4.0 server started at http://0.0.0.0:9876/
25 01 2017 07:20:07.523:INFO [launcher]: Launching browser Chrome with unlimited concurrency
25 01 2017 07:20:07.528:INFO [launcher]: Starting browser Chrome
25 01 2017 07:20:08.071:INFO [Chrome 55.0.2883 (Linux 0.0.0)]: Connected on socket g-BGwMfQLsQM128IAAAA with id 22107710
Chrome 55.0.2883 (Linux 0.0.0) ERROR
unhandled rejection: Q
Chrome 55.0.2883 (Linux 0.0.0): Executed 1 of 2 ERROR (0.006 secs / 0.001 secs)
未处理拒绝的报告是异步的。这会产生一些后果。
我给出的例子进行了第二次测试,需要1秒才能完成。这为浏览器提供了在第一次测试中报告未处理拒绝的时间。没有这种延迟,Karma终止而没有检测到未处理的拒绝。
另一个问题是,当测试X + 1运行时,可能会发现测试X导致的未处理拒绝。跑步者的报告可能会使X + 1看起来像是导致问题的测试。