assert.rejects()

添加的版本:2.5.0

說明

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

測試提供的 Promise 是否拒絕,並可選擇比較拒絕值。

名字 說明
promise(然後可用) 承諾測試拒絕
expectedMatcher 拒絕值匹配器
message(字符串) 斷言的簡短說明

在測試預期會根據一組特定情況返回拒絕承諾的代碼時,請使用 assert.rejects() 進行測試和比較。

expectedMatcher 參數可以是:

  • 當斷言應被視為通過時返回 true 的函數。
  • 錯誤對象
  • 使用 ala rejectionValue instanceof expectedMatcher 的基本構造函數
  • 匹配(或部分匹配)rejectionValue.toString() 的 RegExp

注:為避免混淆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/);
});