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()
匹配(或部分匹配)的正则表达式。
注意: 为了避免 message
和 expectedMatcher
之间的混淆,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/);
});