玩笑无限期挂起,不运行任何测试
Posted
技术标签:
【中文标题】玩笑无限期挂起,不运行任何测试【英文标题】:jest hangs indefinitely, runs no tests 【发布时间】:2018-07-28 12:08:52 【问题描述】:每次我开玩笑时它都不会运行任何东西。我已经让计数器任意高了。我用--no-cache 开玩笑
jest --debug 输出如下:
"configs": [
"automock": false,
"browser": false,
"cache": true,
"cacheDirectory": "/var/folders/7v/64n1tsk11zs2pbwf5bm_c9kc0000gn/T/jest_dx",
"clearMocks": false,
"coveragePathIgnorePatterns": [
"/node_modules/"
],
"detectLeaks": false,
"forceCoverageMatch": [],
"globals": ,
"haste":
"defaultPlatform": "ios",
"platforms": [
"android",
"ios",
"native"
],
"providesModuleNodeModules": [
"react-native"
]
,
"moduleDirectories": [
"node_modules"
],
"moduleFileExtensions": [
"js",
"json",
"jsx",
"node"
],
"moduleNameMapper": [
[
"^React$",
"/Users/skilurus/github/flock-react-app/node_modules/react"
]
],
"modulePathIgnorePatterns": [
"/Users/skilurus/github/flock-react-app/node_modules/react-native/Libraries/react-native/"
],
"name": "b29a126b130a0be47202d3bc7b00f1b4",
"resetMocks": false,
"resetModules": false,
"restoreMocks": false,
"rootDir": "/Users/skilurus/github/flock-react-app",
"roots": [
"/Users/skilurus/github/flock-react-app"
],
"runner": "jest-runner",
"setupFiles": [
"/Users/skilurus/github/flock-react-app/node_modules/regenerator-runtime/runtime.js",
"/Users/skilurus/github/flock-react-app/node_modules/react-native/jest/setup.js",
"/Users/skilurus/github/flock-react-app/test-setup.js"
],
"snapshotSerializers": [
"/Users/skilurus/github/flock-react-app/node_modules/enzyme-to-json/serializer.js"
],
"testEnvironment": "/Users/skilurus/github/flock-react-app/node_modules/jest-environment-jsdom/build/index.js",
"testEnvironmentOptions": ,
"testLocationInResults": false,
"testMatch": [
"**/__tests__/**/*.js?(x)",
"**/?(*.)(spec|test).js?(x)"
],
"testPathIgnorePatterns": [
"/node_modules/",
"e2e"
],
"testRegex": "",
"testRunner": "/Users/skilurus/github/flock-react-app/node_modules/jest-jasmine2/build/index.js",
"testURL": "about:blank",
"timers": "real",
"transform": [
[
"^.+\\.js$",
"/Users/skilurus/github/flock-react-app/node_modules/babel-jest/build/index.js"
],
[
"^[./a-zA-Z0-9$_-]+\\.(bmp|gif|jpg|jpeg|mp4|png|psd|svg|webp)$",
"/Users/skilurus/github/flock-react-app/node_modules/react-native/jest/assetFileTransformer.js"
]
],
"transformIgnorePatterns": [
"node_modules/(?!react-native|native-base|react-navigation|react-native-fabric|tipsi-stripe)"
],
"watchPathIgnorePatterns": []
],
"globalConfig":
"bail": false,
"changedFilesWithAncestor": false,
"collectCoverageFrom": [
"src/**/*.js,jsx"
],
"coverageDirectory": "/Users/skilurus/github/flock-react-app/__coverage__",
"coverageReporters": [
"json",
"lcov",
"text"
],
"coverageThreshold":
"global":
"branches": 70,
"functions": 75,
"lines": 85,
"statements": 80
,
"detectLeaks": false,
"expand": false,
"globalSetup": null,
"globalTeardown": null,
"listTests": false,
"mapCoverage": false,
"maxWorkers": 7,
"noStackTrace": false,
"nonFlagArgs": [],
"notify": false,
"notifyMode": "always",
"passWithNoTests": false,
"rootDir": "/Users/skilurus/github/flock-react-app",
"runTestsByPath": false,
"testFailureExitCode": 1,
"testPathPattern": "",
"testResultsProcessor": null,
"updateSnapshot": "new",
"useStderr": false,
"verbose": true,
"watch": false,
"watchman": true
,
"version": "22.3.0"
节点--版本:8.9.4
npm --version: 5.6.0
yarn --version 1.3.2
有人见过类似的吗?有人知道如何解决这个问题吗?
【问题讨论】:
你有解决办法吗? 可能是的,但我不知道也不记得那是什么。我没有在这里写下我自己的问题的答案这一事实表明我从来没有真正想出如何解决它,而是一些随机的咒语为我修复了一个特定的实例 我通过节点版本更改修复了它。 【参考方案1】:这也发生在我身上,但它是间歇性的,但非常令人沮丧。我发现了一种解决方法,即使用 --runInBand 标志运行,它只在同一个线程中运行测试:
jest --runInBand
【讨论】:
【参考方案2】:为了记录,在我的情况下,它被证明是一个缓存问题(我之前尝试了很多其他的东西)。
开玩笑>=22.0.0使用--clearCache
选项清除缓存。
开玩笑使用--showConfig
选项,搜索cacheDirectory
属性并删除提到的目录。
希望这对某人有所帮助。
【讨论】:
在我们的 CI/CD 中似乎最有效的方法首先是这里的答案,jest --clearCache
,然后是下面的答案之一 jest --runInBand --detectOpenHandles --forceExit
我们在 linux docker 机器上的测试时间从 1 分钟减少了不到 10 秒,没有更多的挂断。【参考方案3】:
就我而言,这是因为我在 VS 代码中使用了一个 jest 插件,并且启用了自动保存。所以,jest跑了太多次就挂了。
删除 /tmp/jest_rs 解决了我的问题。
【讨论】:
【参考方案4】:我已经通过修改我的 .babelrc 解决了这个问题
"presets": ["@babel/preset-env", "@babel/preset-react"],
"plugins": [
[
"styled-jsx/babel",
// "plugins": ["styled-jsx-plugin-postcss"]
]
]
【讨论】:
【参考方案5】:我有同样的问题,测试通过,然后它挂起,CI 也挂起。我偶然发现了--forceExit
,它为我修复了它。
【讨论】:
【参考方案6】:就我而言,我尝试了互联网上的所有方法,唯一的解决方案是设置isolatedModules: true
(我明确将其设置为 false)。
【讨论】:
【参考方案7】:在 MacOS 上,我通过使用 brew uninstall watchman
卸载并重新安装 watchman
然后使用 brew install watchman
重新安装来解决此问题。我最近升级了操作系统,因此可能与它有关。
【讨论】:
【参考方案8】:像这样运行你的测试:
jest --detectOpenHandles --forceExit
--detectOpenHandles
会注销错误,从而阻止您的测试清楚地退出,这意味着--runInBand
可确保您的测试在相同的线程中运行,因此不会重叠。
--forceExit
如果出现问题而不是挂起,它会终止您的测试。
【讨论】:
这与最佳答案jest --clearCache
(先运行此清除缓存命令)相结合,创造了奇迹,谢谢
--detectOpenHandles
暗示--runInBand
,根据docs。
谢谢@MartinvanDriel。我更新了答案。【参考方案9】:
所以我遇到了类似的情况,只是那个玩笑拒绝运行 我的任何测试!原因有点复杂: 我已经超过 6 个月没有运行该项目,并且各种依赖项都发现了漏洞问题。 当我上次运行项目和测试时,我已经使用全局配置全局安装了 jest。 然后有一次,我从全局卸载了 jest(因此丢失了全局配置),但不记得将本地配置添加到我正在谈论的项目中。
在调试以尝试运行测试时,我对节点模块进行了核对并进行了全新安装。
只有在添加了 jest.config 并设置了无缓存选项后,它才最终成功。
总结:
如果您没有全局安装 jest,请确保为您的项目设置一个 jest 配置。 使用 cli 设置配置后,返回并手动检查您选择的所有选项是否存在并修改 cli 未提示的选项。【讨论】:
【参考方案10】:在 MacOS 上卸载和重新安装 watchman 对我不起作用。
运行 watchman version
无限期挂起。
这样做可以让守望者不被吊死:
launchctl unload ~/Library/LaunchAgents/com.github.facebook.watchman.plist
watchman version
https://github.com/facebook/watchman/issues/381#issuecomment-257673900
你应该看到这样的东西然后你就知道它有效了:
"version": "2021.08.23.00"
然后重新运行你的笑话测试
【讨论】:
我想知道你是否记得,你怎么知道它与守望者有关? @MateiIorgulescu 我认为是因为我有 2 台 MacBook,其中一台运行良好,另一台则没有。两者都有相同的节点和节点模块。唯一的区别是,守望者有一个不同的版本【参考方案11】:在我的情况下,将 nodejs 从旧版本(即12.16.1
)更新为更新的版本(例如14.17.3
),然后重新安装 jest(npm install jest -g
)即可解决这完全。
【讨论】:
【参考方案12】:我遇到了类似的问题。我的大部分测试都在运行,但有一个套件持续运行并且从未出错。
事实证明,我的一个 useEffects 中存在竞争条件。这只会导致 jest 不断运行。
诊断问题:
注释掉除一个以外的所有测试。继续添加测试,直到找到触发错误的测试。
分析测试以确定哪些代码受到影响。 (我的问题原来是在 UseEffect 中。)
确定导致竞争条件的状态对象。
修复:删除它或对您的代码进行条件检查以防止竞争条件
【讨论】:
以上是关于玩笑无限期挂起,不运行任何测试的主要内容,如果未能解决你的问题,请参考以下文章
Celery + Redis - .get()在平稳运行约70个小时后无限期挂起