在所有测试运行后开玩笑清理

     2023-02-22     62

关键词:

【中文标题】在所有测试运行后开玩笑清理【英文标题】:Jest clean up after all tests have run 【发布时间】:2017-05-10 00:32:50 【问题描述】:

是否可以在 Jest 中运行在所有其他测试完成后运行的清理或拆卸任务?类似于 setupFiles 允许在任何测试运行之前设置任务的方式。如果无论测试是否有任何错误,它也可以运行,则加分。

afterAll(() => ) 放在文件的顶层(在任何描述函数之外)似乎只会在该特定文件的测试完成后运行。

用例是我有许多测试文件将在开发数据库中创建用户,我不想让每个测试文件负责清理和删除用户之后。编写测试时也可能发生错误,因此如果不管错误如何都发生清理,那将是更可取的。

【问题讨论】:

我认为每个测试都必须完全控制环境,因此每个测试都必须对其环境负责。也许您需要拥有多个环境,例如一个可以在内存中运行(使用数据库的模拟实现),而另一个可以真正与数据库一起运行。 你能在你的测试运行器中添加一个清理命令吗?即,如果您使用 gulp、make、grunt 等:run_your_tests.js; clean_up_database; 【参考方案1】:

似乎有一个名为 reporter 的功能正是这样做的:

【讨论】:

在这种情况下,安装文件会更相关恕我直言【参考方案2】:

要在所有测试套件完成后执行某些任务,请使用 globalTeardown。示例:

在 package.json 中:


  "jest": 
    "globalTeardown": "<rootDir>/teardownJest.js"
  ,
 

teardownJest.js中:

const teardown = async () => 
  console.log('called after all test suites');


module.exports = teardown;

请记住,jest 从头开始​​为每个测试套件和拆卸文件导入每个模块。来自official documentation:

默认情况下,每个测试文件都有自己独立的模块注册表

因此,您不能为每个测试套件或拆卸文件共享相同的数据库模块实例。因此,如果你想在所有测试服之后关闭数据库连接,这种方法是行不通的

【讨论】:

【参考方案3】:

jest.config.js:

module.exports = 
    // ...
    setupFilesAfterEnv: [
        "./test/setup.js",
        // can have more setup files here
    ],

./test/setup.js:

afterAll(() =>  // or: afterAll(async () =>  ); to support await calls
    // Cleanup logic
);

注意:

我正在使用 Jest 24.8 参考: setupFilesAfterEnv

【讨论】:

【参考方案4】:

setupFiles 有一个兄弟钩子,它会在每个测试套件之前但在您的测试运行器(默认为 Jasmine2)初始化全局环境之后立即触发。

它叫做setupFilesAfterEnv。像这样使用它:


    "setupFilesAfterEnv": ["<rootDir>/setup.js"]

示例setup.js

beforeAll(() => console.log('beforeAll'));
afterAll(() => console.log('afterAll'));

setup.js 不需要导出任何内容。它将在每个测试套件(每个测试文件)之前执行。因为测试运行器已经初始化,像 beforeAllafterAll 这样的全局函数就像在你的常规测试文件中一样,所以你可以随意调用它们。

【讨论】:

选项“setupTestFrameworkScriptFile”替换为配置“setupFilesAfterEnv”,支持多路径。 我需要 globalTeardown(和 globalSetup),因为我需要在每次测试运行时启动和停止并行服务,而不是在每个测试套件之前或之后。

Gitlab - 开玩笑测试 - 分段错误(核心转储)

】Gitlab-开玩笑测试-分段错误(核心转储)【英文标题】:Gitlab-jesttest-Segmentationfault(coredumped)【发布时间】:2021-09-0120:55:59【问题描述】:在GitLabRunner中,安装完所有npm模块后,Jest针对Typescript中的所有单元测试运行。开玩笑的... 查看详情

Codeception 在 CEST 内的所有测试之前运行

】Codeception在CEST内的所有测试之前运行【英文标题】:CodeceptionrunbeforealltestsinsideaCEST【发布时间】:2016-08-2113:34:51【问题描述】:我想在特定Cest中的所有测试之前运行一些东西,然后在所有测试运行后清理它,类似于PHPUnit中的s... 查看详情

Redis 测试通过后不退出(使用玩笑)

...测试过程中遇到了问题。我使用jest和redis-mock进行测试,所有测试都通过了。问题是当我导入一个导入redis文件的文件时。测试文件不退出。例子:index.test.jsimportred 查看详情

开玩笑反应测试:延迟后检查状态

】开玩笑反应测试:延迟后检查状态【英文标题】:Jestreacttesting:Checkstateafterdelay【发布时间】:2018-01-1017:38:51【问题描述】:在Jest文档https://facebook.github.io/jest/docs/timer-mocks.html#content的帮助下创建测试时我真的很困惑我正在尝试... 查看详情

第一次失败后开玩笑停止测试套件

】第一次失败后开玩笑停止测试套件【英文标题】:Jeststoptestsuiteafterfirstfail【发布时间】:2018-12-1709:37:18【问题描述】:我正在使用Jest进行测试。我想要的是在该测试套件中的测试失败时停止执行当前测试套件。--bailoption不是... 查看详情

如何在 Jest 测试中使用 nuxt 运行时配置变量

...描述】:我在nuxt.config.js中定义了私有运行时配置。作为开玩笑测试的一部分,当我尝试测试具有运行时配置变量的方法时,它会引发undefinedvariableerror。有人可以帮我知道如何在开玩笑测试中使用nuxt运行 查看详情

Jest Puppeteer 测试在一起运行时失败(同步)

...布时间】:2020-11-1806:41:48【问题描述】:使用的技术:npm开玩笑开玩笑的木偶师如果我一个一个地运行我的测试,它们会单独通过$npmtesttest/file.to.test.js...TestSuites:1passed,1total 查看详情

开玩笑 没有找到测试

】开玩笑没有找到测试【英文标题】:JestNoTestsfound【发布时间】:2017-11-2805:36:54【问题描述】:在macOS上运行dockermhart/alpine-node:8nodejs(6.10.3-r0)(18/18)纱线0.24.6开玩笑20.0.4但是,在运行代码时,我有一个__tests__/index.test.js文件node_modu... 查看详情

开玩笑:测试套件无法运行,TypeError:无法读取未定义的属性“绑定”

】开玩笑:测试套件无法运行,TypeError:无法读取未定义的属性“绑定”【英文标题】:jest:Testsuitefailedtorun,TypeError:Cannotreadproperty\'bind\'ofundefined【发布时间】:2017-07-3006:35:40【问题描述】:我们在react-native中使用单元测试中的... 查看详情

将 Swiper 6 升级到 7 后,在单元测试(开玩笑)上找不到模块“swiper_angular”

】将Swiper6升级到7后,在单元测试(开玩笑)上找不到模块“swiper_angular”【英文标题】:Cannotfindmodule\'swiper_angular\'onunittest(jest)afterupgradingSwiper6to7【发布时间】:2022-01-1218:20:29【问题描述】:我在upgradingSwiper6to7之后的单元测试... 查看详情

开玩笑单元测试返回“MongoError:拓扑被破坏”

】开玩笑单元测试返回“MongoError:拓扑被破坏”【英文标题】:JestUnitTestingReturning"MongoError:topologywasdestroyed"【发布时间】:2019-11-1419:08:27【问题描述】:我正在尝试使用Jest对我的Node.js应用程序运行单元测试。我创建了... 查看详情

MongooseError - 开玩笑地连接到 mongoosedb NestJS 测试用例时,操作 users.xxx() 缓冲在 10000 毫秒后超时

】MongooseError-开玩笑地连接到mongoosedbNestJS测试用例时,操作users.xxx()缓冲在10000毫秒后超时【英文标题】:MongooseError-Operationusers.xxx()bufferingtimedoutafter10000mswhileconnectingtomongoosedbNestJStestcaseinjest【发布时间】:2021-08-1118:44:54【问题描... 查看详情

为啥在运行玩笑测试时出现“未定义:x:y:属性”缺失错误?

】为啥在运行玩笑测试时出现“未定义:x:y:属性”缺失错误?【英文标题】:WhyamIgetting\'undefined:x:y:property\'missingerrorwhenrunningjesttests?为什么在运行玩笑测试时出现“未定义:x:y:属性”缺失错误?【发布时间】:2019-10-1411:4... 查看详情

为啥地理定位在深度清理后停止在 Android Go 上运行?

...:59:24【问题描述】:一旦用户对设备进行深度清理(清除所有正在运行的应用程序),CordovaGeolocation插件就会停止在AndroidGo上运行 查看详情

开玩笑测试后杀死或关闭阿波罗服务器上的 websocket

】开玩笑测试后杀死或关闭阿波罗服务器上的websocket【英文标题】:Killorclosewebsocketonapollo-serverafterjesttest【发布时间】:2020-10-0817:33:25【问题描述】:我想知道在玩笑测试后如何关闭websocket?目前我有这个:packages.json"scripts":"tes... 查看详情

开玩笑:测试套件无法运行,意外令牌 =

】开玩笑:测试套件无法运行,意外令牌=【英文标题】:Jest:Testsuitefailedtorun,Unexpectedtoken=【发布时间】:2018-05-0103:27:57【问题描述】:我正在尝试使用Jest/Enzyme测试React组件。我希望测试至少可以运行,但是在导入文件时它已经... 查看详情

ReferenceError:在开玩笑测试中没有定义 React

】ReferenceError:在开玩笑测试中没有定义React【英文标题】:ReferenceError:Reactisnotdefinedinjesttests【发布时间】:2020-03-1717:46:11【问题描述】:我有以下在浏览器中正确执行的行eval(Babel.transform(template,presets:[\'react\']).code);但是当我运... 查看详情

并行 JUnit 测试不执行关闭挂钩

...我正在使用Maven在并行类中运行多个JUnit测试。我有清理所有JUnit测试运行后需要执行的任务。为了处理这种清理,我在一些测试中添加了一个关闭挂钩。当我不并行运行时,关闭挂钩正确执行,但是当我并行运行时,我看不到关... 查看详情