assert.rejects()

添加版本: 2.5.0.

描述

rejects( promise, message = "" )
rejects( promise, expectedMatcher, message = "" )

测试提供的 promise 是否被拒绝,并可选地比较拒绝值。

名称 描述
promise (thenable) 要测试拒绝的 Promise
expectedMatcher 拒绝值匹配器
message (string) 断言的简短描述

当测试预期在特定情况下返回被拒绝的 promise 的代码时,请使用 assert.rejects() 进行测试和比较。

expectedMatcher 参数可以是

  • 当断言应被视为通过时返回 true 的函数。
  • 错误对象。
  • 要使用的基类构造函数,类似于 rejectionValue instanceof expectedMatcher
  • rejectionValue.toString() 匹配(或部分匹配)的正则表达式。

注意: 为了避免 messageexpectedMatcher 之间的混淆,expectedMatcher **不能** 是字符串。

示例

QUnit.test('rejects example', assert => {
  // simple check
  assert.rejects(Promise.reject('some error'));

  // simple check
  assert.rejects(
    Promise.reject('some error'),
    'optional description here'
  );

  // match pattern on actual error
  assert.rejects(
    Promise.reject(new Error('some error')),
    /some error/,
    'optional description here'
  );

  // Using a custom error constructor
  function CustomError (message) {
    this.message = message;
  }
  CustomError.prototype.toString = function () {
    return this.message;
  };

  // actual error is an instance of the expected constructor
  assert.rejects(
    Promise.reject(new CustomError('some error')),
    CustomError
  );

  // actual error has strictly equal `constructor`, `name` and `message` properties
  // of the expected error object
  assert.rejects(
    Promise.reject(new CustomError('some error')),
    new CustomError('some error')
  );

  // custom validation arrow function
  assert.rejects(
    Promise.reject(new CustomError('some error')),
    (err) => err.toString() === 'some error'
  );

  // custom validation function
  assert.rejects(
    Promise.reject(new CustomError('some error')),
    function (err) {
      return err.toString() === 'some error';
    }
  );
});

assert.rejects() 方法返回一个 Promise,它处理测试成功和失败的(通常是异步的)解析和拒绝逻辑。不需要 await 返回的值,因为 QUnit 在内部为您处理异步控制并等待稳定状态。但是,如果您的测试代码需要在 rejects 调用之间保持一致且更隔离的状态,那么应该显式地等待它以阻止下一个语句。

QUnit.test('stateful rejects example', async assert => {
  let value;

  // asynchronously resolve if value < 5, and reject otherwise
  function asyncChecker () {
    return new Promise((resolve, reject) => {
      setTimeout(() => {
        if (value < 5) {
          resolve();
        } else {
          reject('bad value: ' + value);
        }
      }, 10);
    });
  }

  value = 8;
  await assert.rejects(asyncChecker(), /bad value: 8/);

  // if the above was not awaited, then the next line would change the value
  // before the previous assertion could occur, and would cause a test failure
  value = Infinity;
  await assert.rejects(asyncChecker(), /bad value: Infinity/);
});