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()。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。