assert.throws()

添加的版本:1.0.0

說明

throws( blockFn, message = "" )
throws( blockFn, expectedMatcher, message = "" )

測試回調是否拋出異常,並可選擇比較拋出的錯誤。

名字 說明
blockFn(函數) 要執行的函數
expectedMatcher 預期的錯誤匹配器
message(字符串) 斷言的簡短說明

在測試預期會根據一組特定情況引發異常的代碼時,請使用 assert.throws() 捕獲錯誤對象以進行測試和比較。

expectedMatcher 參數可以是:

  • 錯誤對象
  • 使用 ala errorValue instanceof expectedMatcher 的錯誤構造函數
  • 匹配(或部分匹配)字符串表示的 RegExp
  • 必須返回 true 以通過斷言檢查的回調函數。

在極少數環境中,例如 Closure Compiler,throws 可能會導致錯誤。在那裏你可以使用 assert.raises() 。它具有相同的簽名和行為,隻是名稱不同。

變更日誌

QUnit 2.12 添加了對箭頭函數的支持作為expectedMatcher 回調函數。
QUnit 1.9 assert.raises()改名為assert.throws().
assert.raises()方法仍然支持作為別名。

例子

QUnit.test('throws example', assert => {
  // simple check
  assert.throws(function () {
    throw new Error('boo');
  });

  // simple check
  assert.throws(
    function () {
      throw new Error('boo');
    },
    'optional description here'
  );

  // match pattern on actual error
  assert.throws(
    function () {
      throw 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.throws(
    function () {
      throw new CustomError('some error');
    },
    CustomError
  );

  // actual error has strictly equal `constructor`, `name` and `message` properties
  // of the expected error object
  assert.throws(
    function () {
      throw new CustomError('some error');
    },
    new CustomError('some error')
  );

  // custom validation arrow function
  assert.throws(
    function () {
      throw new CustomError('some error');
    },
    (err) => err.toString() === 'some error'
  );

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