
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
微信扫一扫
支付宝扫一扫