栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

如何异步构建测试套件?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何异步构建测试套件?

您应该使用

--delay
选项运行Mocha ,然后
run()
在完成测试套件的构建后再使用。这是从您在问题中显示的代码派生的示例:

'use strict';function test() {    console.log(1);    describe('Unit Testing', () => {        console.log(2);        it("test", () => { console.log(3);        });    });    // You must use --delay for `run()` to be available to you.    run();}setTimeout(test, 1000);

setTimeout
用来模拟异步操作。使用
--delay
run()
允许您构建作为异步计算结果的套件。但是请注意,套件必须一次性构建。(您不能在内部使用异步进程
describe
进行调用
it
。这将无法工作。)


你绝对不应该做的一件事就是rob3c的建议:从一个钩子内部调用

describe
it
(或两者)。这是每个人不时犯的错误,因此值得详细解决。问题是Mocha不支持它,因此没有与调用
describe
it
挂钩内部相关的已建立语义。哦,有可能写一些简单的示例,这些示例可以按预期工作,但是:

  1. 当套件变得更加复杂时,套件的行为不再对应于任何明智的行为。

  2. 由于没有与此方法相关的语义,因此较新的Mocha版本可能会以不同的方式处理错误用法并破坏套件。

考虑以下简单示例:

const assert = require("assert");const p = Promise.resolve(["foo", "bar", "baz"]);describe("top", () => {    let flag;    before(() => {        flag = true;        return p.then((names) => { describe("embedded", () => {     for (const name of names) {         it(name, () => {  assert(flag);         });     } });        });    });    after(() => {        flag = false;    });    it("regular test", () => {        assert(flag);    });});

当我们运行它时,我们得到:

  top    ✓ regular test  embedded    1) foo    2) bar    3) baz  1 passing (32ms)  3 failing  // [stack traces omitted for brevity]

这里发生了什么?所有的测试不应该通过吗?我们设置

flag
true
before
钩的
top
描述。我们在其中创建的所有测试都应该显示
flag
true
,否?线索就在上面的输出中:当我们在一个钩子中创建测试时,Mocha会将测试
放在某个地方, 但是它可能不在反映
describe
代码中块结构的位置。 在这种情况下
,发生的事情是Mocha只是将在钩子中创建的测试附加到套件的末尾,而不是
top
describe的末尾,因此该
after
钩子在动态创建的测试之前运行,并且我们得到了违反直觉的结果。

使用

--delay
run()
,我们可以编写一个行为与直觉一致的套件:

const assert = require("assert");const p = Promise.resolve(["foo", "bar", "baz"]).then((names) => {    describe("top", () => {        let flag;        before(() => { flag = true;        });        after(() => { flag = false;        });        describe("embedded", () => { for (const name of names) {     it(name, () => {         assert(flag);     }); }        });        it("regular test", () => { assert(flag);        });    });    run();});

输出:

  top    ✓ regular test    embedded      ✓ foo      ✓ bar      ✓ baz  4 passing (19ms)


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393358.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号