在substack/tape中使用"plan"和"end"的目的是什么?

oib*_*ibe 5 javascript testing tdd node.js node.js-tape

substack的磁带测试模块允许您使用该plan方法提前指定断言的数量,然后它将自动end为您调用.为什么不放在end测试结束?使用plan和有end什么区别?

Bar*_*ney 5

自述文件的第一个示例显示了可行planend不会的情况 - 异步测试解析.在这种情况下,你没有明确说,当测试应该都已经解决了,你说有多少最终应该解决:

test('timing test', function (t) {
    t.plan(2);

    t.equal(typeof Date.now, 'function');
    var start = Date.now();

    setTimeout(function () {
        t.equal(Date.now() - start, 100);
    }, 100);
});
Run Code Online (Sandbox Code Playgroud)

如果我们使用end,编写此测试的直观方式如下:

test('timing test', function (t) {
    t.equal(typeof Date.now, 'function');
    var start = Date.now();

    setTimeout(function () {
        t.equal(Date.now() - start, 100);
    }, 100);

    t.end();
});
Run Code Online (Sandbox Code Playgroud)

......但是在第二次断言有机会运行之前,这将结束测试.

您可以进一步推断出需要执行异步或动态代码的任何情况.

  • 我们不能在setTimeout()回调中放入`t.end()`吗? (2认同)