assert.verifySteps()
添加的版本:2.2.0
说明
verifySteps( steps, message = "" )
一个辅助断言,用于验证测试中步骤的顺序和数量。
名字 | 说明 |
---|---|
steps (数组) |
字符串列表 |
message (字符串) |
断言的简短说明 |
assert.verifySteps()
断言将给定的字符串值数组(表示步骤)与先前 step()
调用的顺序和值进行比较。此断言有助于验证代码路径部分的顺序和数量,尤其是异步路径。
调用assert.verifySteps([/* ...snip ... */])
时,将重置验证步骤列表。这允许 assert.step
和 assert.verifySteps
在同一测试中的多种组合。
了解如何使用 Step API 以及它为您的测试套件增加的值。
例子
Step API 严格验证观察值的顺序和频率。它还允许检测意外步骤,然后将其显示为测试失败的一部分。
测试基于事件的接口
此示例使用基于
的类,例如由 Node.js 和其他环境提供的类:EventEmitter
QUnit.test('good example', async assert => {
const thing = new MyThing();
thing.on('start', () => {
assert.step('start');
});
thing.on('middle', () => {
assert.step('middle');
});
thing.on('end', () => {
assert.step('end');
});
thing.on('error', message => {
assert.step({ error: message });
});
await thing.process();
assert.verifySteps([ 'start', 'middle', 'end' ]);
});
当在没有 Step API 的情况下处理这种情况时,可能会倾向于将比较检查直接放在事件回调中。在测试无法控制的回调中进行虚拟断言被认为是一种反模式,因为这会提供松散的保证并且很容易导致误报(回调可能无法运行、无序运行或多次运行)。如果出现问题,它还提供相当有限的调试信息。
// WARNING: This is a BAD example
QUnit.test('bad example 1', assert => {
const thing = new MyThing();
thing.on('start', () => {
assert.true(true, 'start');
});
thing.on('middle', () => {
assert.true(true, 'middle');
});
thing.on('end', () => {
assert.true(true, 'end');
});
thing.on('error', () => {
assert.true(false, 'error');
});
return thing.process();
});
一种不太脆弱的方法可能涉及一个带有数组的局部计数器变量,我们用
检查该数组。这会捕获 out-of-order 问题、意外值、重复值,并在出现问题时提供详细的调试信息。这本质上是 Step API 的工作原理:deepEqual
QUnit.test('manual example without Step API', assert => {
const values = [];
const thing = new MyThing();
thing.on('start', () => {
values.push('start');
});
thing.on('middle', () => {
values.push('middle');
});
thing.on('end', () => {
values.push('end');
});
thing.on('error', () => {
values.push('error');
});
return thing.process().then(() => {
assert.deepEqual(values, [ 'start', 'middle', 'end' ]);
});
});
测试发布/订阅系统
使用 Step API 验证在 Pub-Sub 频道或主题中收到的消息。
QUnit.test('good example', assert => {
const publisher = new Publisher();
const subscriber1 = (message) => assert.step(`Sub 1: ${message}`);
const subscriber2 = (message) => assert.step(`Sub 2: ${message}`);
publisher.subscribe(subscriber1);
publisher.subscribe(subscriber2);
publisher.publish('Hello!');
publisher.unsubscribe(subscriber1);
publisher.publish('World!');
assert.verifySteps([
'Sub 1: Hello!',
'Sub 2: Hello!',
'Sub 2: World!'
]);
});
一次测试中的多步验证
调用 verifySteps()
时,观察到的步骤的内部缓冲区会自动重置。
QUnit.test('multiple verifications example', assert => {
assert.step('one');
assert.step('two');
assert.verifySteps([ 'one', 'two' ]);
assert.step('three');
assert.step('four');
assert.verifySteps([ 'three', 'four' ]);
});
相关用法
- JavaScript assert.expect()用法及代码示例
- JavaScript assert.rejects()用法及代码示例
- JavaScript assert.propContains()用法及代码示例
- JavaScript assert.notPropContains()用法及代码示例
- JavaScript assert.timeout()用法及代码示例
- JavaScript assert.deepEqual()用法及代码示例
- JavaScript assert.propEqual()用法及代码示例
- JavaScript assert.notDeepEqual()用法及代码示例
- JavaScript assert.pushResult()用法及代码示例
- JavaScript assert.notPropEqual()用法及代码示例
- JavaScript assert.async()用法及代码示例
- JavaScript assert.strictEqual()用法及代码示例
- JavaScript assert.notEqual()用法及代码示例
- JavaScript assert.notOk()用法及代码示例
- JavaScript assert.throws()用法及代码示例
- JavaScript assert.equal()用法及代码示例
- JavaScript assert.false()用法及代码示例
- JavaScript assert.ok()用法及代码示例
- JavaScript assert.true()用法及代码示例
- JavaScript assert.notStrictEqual()用法及代码示例
- JavaScript assert.step()用法及代码示例
- JavaScript array.length属性用法及代码示例
- JavaScript esri/layers/OpenStreetMapLayer.minScale用法及代码示例
- JavaScript esri/layers/KMLLayer.maxScale用法及代码示例
- JavaScript esri/widgets/Histogram.labelFormatFunction用法及代码示例
注:本文由纯净天空筛选整理自qunitjs.com大神的英文原创作品 assert.verifySteps()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。