Jest 中的 globalSetup、setupFiles、setupFilesAfterEnv 和 beforeAll 之间有什么区别?它们的具体用途是什么?

Edv*_*ard 25 jestjs

我已经阅读了 Jest 文档,我认为它们是按这个顺序运行的。我还了解到 globalSetup 在不同的进程中运行,因此不与常规测试套件共享任何范围,而是与 globalTeardown 共享任何范围,因此这将是启动测试数据库服务器的好地方。

无论如何,我不清楚我是否做对了以及我应该使用其他的做什么。

Bri*_*ams 56

globalSetup

\n

导出函数的模块的路径,该async函数将在所有操作之前运行一次。此处定义的全局变量只能在globalTeardown.

\n

通常,模拟任何依赖项更有意义,但如果您别无选择,只能启动数据库或其他在测试期间绝对必须运行的外部服务,globalSetup就可以这样做。

\n
\n

setupFiles/setupFilesAfterEnv

\n

setupFiles是在每个测试文件之前和安装测试框架之前运行一次的模块列表。

\n

setupFilesAfterEnv是在每个测试文件之前但在环境中安装测试框架之后将运行一次的模块列表。

\n

通常setupFilesAfterEnv是在每个测试文件之前运行的任何设置代码的正确位置。setupFiles仅当您有特定原因需要在安装测试框架之前运行代码时才使用。

\n

您可以将其视为setupFilesAfterEnv全局beforeAll.

\n

如果必须在每个测试文件的开头执行某些操作(例如:配置 Enzyme 适配器),则在文件中执行一次是有意义的setupFilesAfterEnv

\n
\n

beforeAll

\n

Jest将运行所有beforeAll测试文件中的所有函数一次。

\n

使用beforeAll必须在一个特定测试文件开头运行一次的代码。

\n
\n

例子

\n

包.json

\n
{\n\n  ...\n\n  "jest": {\n    "globalSetup": "./globalSetup.js",\n    "globalTeardown": "./globalTeardown.js",\n    "setupFiles": ["./setupFile.js"],\n    "setupFilesAfterEnv": ["./setupFileAfterEnv.js"]\n  }\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

全局设置.js

\n
{\n\n  ...\n\n  "jest": {\n    "globalSetup": "./globalSetup.js",\n    "globalTeardown": "./globalTeardown.js",\n    "setupFiles": ["./setupFile.js"],\n    "setupFilesAfterEnv": ["./setupFileAfterEnv.js"]\n  }\n}\n\n
Run Code Online (Sandbox Code Playgroud)\n

全局Teardown.js

\n
module.exports = async () => {\n  console.log(\'in globalSetup\');\n  global.GLOBALSETUP = \'globalSetup\';\n};\n
Run Code Online (Sandbox Code Playgroud)\n

setupFile.js

\n
module.exports = async () => {\n  console.log(\'in globalTeardown\');\n  console.log(global.GLOBALSETUP);\n};\n
Run Code Online (Sandbox Code Playgroud)\n

setupFileAfterEnv.js

\n
console.log(\'in setupFile\');\nglobal.order = [];\nglobal.order.push(1);\n
Run Code Online (Sandbox Code Playgroud)\n

测试.js

\n
console.log(\'in setupFileAfterEnv\');\nglobal.order.push(2);\n
Run Code Online (Sandbox Code Playgroud)\n

输出

\n
Determining test suites to run...in globalSetup\n  console.log\n    in setupFile\n\n      at Object.<anonymous> (setupFile.js:1:98)\n\n  console.log\n    in setupFileAfterEnv\n\n      at Object.<anonymous> (setupFileAfterEnv.js:1:1)\n\n  console.log\n    in beforeAll\n\n      at Object.<anonymous>.beforeAll (src/test.js:3:11)\n\n PASS  src/test.js\n  \xe2\x9c\x93 order (4 ms)\n\nTest Suites: 1 passed, 1 total\nTests:       1 passed, 1 total\nSnapshots:   0 total\nTime:        0.658 s, estimated 1 s\nRan all test suites.\nin globalTeardown\nglobalSetup\n\nWatch Usage: Press w to show more.\n
Run Code Online (Sandbox Code Playgroud)\n

  • 很好的答案。布局合理,配有示例和出色的格式。干得好,谢谢! (5认同)