笑话回顾:什么时候运行?

笑话回顾:什么时候运行?

tl;dr:执行顺序

顶层和describe() 块中的所有内容(其中describe() 块基本上是iife)之前所有()顶级第一级描述()第n级describe()在每个()之前顶级第一级描述()第n级describe()测试()每个之后()第n级describe()第一级描述()顶级毕竟()第n级describe()第一级描述()顶级

免责声明

我假设您对笑话和单元测试有基本的了解。我不会解释钩子的含义。这更多的是备忘单/参考类型的帖子。

有规则

乍一看,笑话似乎有神奇的作用。什么时候执行什么?但如果你想一想,它就会变得明显不那么令人困惑。

也许这些简单的“规则”有帮助:

每个文件都是独立执行的:您在 a.test.js 中所做的任何操作都不会影响 b.test.js。 (除非你开始访问外部资源)describe() 回调会立即执行。钩子(beforeall/afterall、beforeeach/aftereach)从外部作用域(顶级/模块)到内部作用域(描述)执行。

基本示例

console.log("./");beforeall(() => {    console.log("./beforeall");})beforeeach(() => {    console.log("./beforeeach");})afterall(() => {    console.log("./afterall");})aftereach(() => {    console.log("./aftereach");})describe("foo", () => {    console.log("./describe(foo)/");    beforeall(() => {        console.log("./describe(foo)/beforeall");    })    beforeeach(() => {        console.log("./describe(foo)/beforeeach");    })    afterall(() => {        console.log("./describe(foo)/afterall");    })    aftereach(() => {        console.log("./describe(foo)/aftereach");    })    test("testfoo", () => {        console.log("./describe(foo)/test(testfoo)");    })    console.log("./describe(foo)/");})describe("bar", () => {    console.log("./describe(bar)/");    beforeall(() => {        console.log("./describe(bar)/beforeall");    })    beforeeach(() => {        console.log("./describe(bar)/beforeeach");    })    afterall(() => {        console.log("./describe(bar)/afterall");    })    aftereach(() => {        console.log("./describe(bar)/aftereach");    })    test("testbar", () => {        console.log("./describe(bar)/test(testbar)");    })    test("testotherbar", () => {        console.log("./describe(bar)/test(testotherbar)");    })    console.log("./describe(bar)/");})console.log("./");

这是结果(在我删除其他输出后):

././describe(foo)/./describe(foo)/./describe(bar)/./describe(bar)/././beforeall./describe(foo)/beforeall./beforeeach./describe(foo)/beforeeach./describe(foo)/test(testfoo)./describe(foo)/aftereach./aftereach./describe(foo)/afterall./describe(bar)/beforeall./beforeeach./describe(bar)/beforeeach./describe(bar)/test(testbar)./describe(bar)/aftereach./aftereach./beforeeach./describe(bar)/beforeeach./describe(bar)/test(testotherbar)./describe(bar)/aftereach./aftereach./describe(bar)/afterall./afterall

会发生什么?

顶层和描述回调中的所有内容都会立即执行:

././describe(foo)/./describe(foo)/./describe(bar)/./describe(bar)/./[...]

顶层的 beforeall 和 afterall 是所有测试的“支撑”。每个只执行一次。

一览运营宝 一览运营宝

一览“运营宝”是一款搭载AIGC的视频创作赋能及变现工具,由深耕视频行业18年的一览科技研发推出。

一览运营宝 41 查看详情 一览运营宝

[...]./beforeall[...]./afterall

./describe(*)/beforeall 和 ./describe(*)/afterall 是 that 描述回调中所有测试的大括号。每个只执行一次。

[...]./describe(foo)/beforeall[...]./describe(foo)/afterall./describe(bar)/beforeall[...]./describe(bar)/afterall[...]

beforeeach 和 aftereach 是每个测试周围的大括号。最顶层是大括号。描述级别是内部大括号。

[...]./beforeeach./describe(*)/beforeeach[...]./describe(*)/aftereach./aftereach[...]

高级版

这是一个带有嵌套描述块的高级示例。它生成 xmlish 结果来强调执行步骤的分层性质。

console.log("");beforeall(() => {    console.log("");})beforeeach(() => {    console.log("");})afterall(() => {    console.log("");})aftereach(() => {    console.log("");})describe("foo", () => {    console.log("");    beforeall(() => {        console.log("");    })    beforeeach(() => {        console.log("");    })    afterall(() => {        console.log("  ");    })    aftereach(() => {        console.log("  ");    })    test("testfoo", () => {        console.log("");    })    console.log(" ");})describe("bar", () => {    describe("barinner", () => {        console.log("");        beforeall(() => {            console.log("");        })        beforeeach(() => {            console.log("");        })        afterall(() => {            console.log(" ");        })        aftereach(() => {            console.log(" ");        })        test("testbarinner", () => {            console.log("");        })        console.log(" ");    })    console.log("");    beforeall(() => {        console.log("");    })    beforeeach(() => {        console.log("");    })    afterall(() => {        console.log(" ");    })    aftereach(() => {        console.log(" ");    })    test("testbar", () => {        console.log("");    })    test("testotherbar", () => {        console.log("");    })    console.log(" ");})console.log("");

这是经过一些清理和格式化后的输出:

                                                                                                                                                                                                                                                                                                                                                                     

这就是关于执行顺序的全部知识。

以上就是笑话回顾:什么时候运行?的详细内容,更多请关注创想鸟其它相关文章!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/469936.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年11月8日 07:08:25
下一篇 2025年11月8日 07:10:02

相关推荐

发表回复

登录后才能评论
关注微信