如果有未处理的拒绝,我怎么能失败Karma测试?

时间:2017-01-25 00:05:31

标签: karma-runner

有几个地方提出这个解决方案:

window.addEventListener('unhandledrejection', function(err) {                     
  window.__karma__.error(err); // yeah private API ¯\_(ツ)_/¯                     
});

但它抛出:

Uncaught TypeError: Cannot read property 'error' of undefined

1 个答案:

答案 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.jstest.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看起来像是导致问题的测试。