assert.rejects()

バージョン追加: 2.5.0.

説明

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

提供されたプロミスが拒否されるかどうかをテストし、必要に応じて拒否値を比較します。

名前 説明
promise (thenable) 拒否に関してテストするプロミス
expectedMatcher 拒否値の一致条件
message (文字列) アサーションの簡単な説明

特定の状況に基づいて拒否されたプロミスを返すことが期待されるコードをテストする場合、テストと比較のために asserts.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/);
});