当断言期间拒绝承诺时,Karma通过测试

时间:2016-08-30 17:04:41

标签: javascript promise karma-mocha

如果承诺本身在'does fail'测试中被拒绝,则测试失败,如我所料。如果断言失败/抛出错误/ promise在promise的“then”中被拒绝,我会记录ERROR: 'Unhandled promise rejection'并且测试仍然通过。如何让它在拒绝时失败而不是记录拒绝未处理?

import { expect } from 'chai';

describe.only('What?', () => {
  const e = new Error('NOPE');

  it('does fail', () => Promise.reject(e));

  it('should fail when rejected', () => {
    const promise = new Promise(r => r());

    promise.then(() => Promise.reject(e));

    return promise;
  });

  it('should fail when thrown, then caught then rejected', () => {
    const promise = new Promise(r => r());

    promise
      .then(() => { throw e; })
      .catch(() => Promise.reject('huh'));

    return promise;
  });

  it('should fail/reject when thrown, then caught then rethrown', () => {
    const promise = new Promise(r => r());

    promise
      .then(() => { throw e; })
      .catch(er => { throw er; });

    return promise;
  });

  it(`doesn't matter if I expect`, () => {
    const promise = new Promise(r => r());

    promise.then(() => {
      expect(1).to.eq(2);
    });

    return promise;
  });
});

然后报告......

START:
  What?
    ✖ does fail
    ✔ should fail when rejected
ERROR: 'Unhandled promise rejection', Error{stack: undefined}
    ✔ should fail when thrown, then caught then rejected
ERROR: 'Unhandled promise rejection', 'huh'
    ✔ should fail/reject when thrown, then caught then rethrown
ERROR: 'Unhandled promise rejection', Error{stack: undefined, line: 47567, sourceURL: 'http://localhost:9876/base/test/test_index.js?7f696b0b50c0a51c7a2fa5278582072b20241a3b'}
    ✔ doesn't matter if I expect
ERROR: 'Unhandled promise rejection', AssertionError{message: 'expected 1 to equal 2', showDiff: true, actual: 1, expected: 2, stack: 'AssertionError@http://localhost:9876/base/test/test_index.js?7f696b0b50c0a51c7a2fa5278582072b20241a3b:39222:25

1 个答案:

答案 0 :(得分:3)

您必须返回then(...)的返回值,而不是您创建的第一个承诺。