首页 > 解决方案 > 在 docker 容器中使用 jest 运行节点测试时出错

问题描述

我正在尝试在 docker 容器中的节点应用程序上使用 jest 运行一系列单元测试。

我正在尝试使用npm test命令运行这些测试,并且在脚本部分的package.json文件中,我具有以下配置:

"scripts": {
    "test": "jest --watchAll --verbose"
  },

当我在 docker 之外的本地计算机上运行此命令时,测试运行成功,但是,当我尝试在 docker 中运行相同的命令时,出现一个奇怪的错误:

TypeError: (0 , (_jestValidate || _load_jestValidate(...)).validateCLIOptions) is not a function
    at buildArgv (/usr/src/app/node_modules/jest-cli/build/cli/index.js:233:66)
    at Object.<anonymous> (/usr/src/app/node_modules/jest-cli/build/cli/index.js:11:20)
    at Generator.next (<anonymous>)
    at step (/usr/src/app/node_modules/jest-cli/build/cli/index.js:158:191)
    at /usr/src/app/node_modules/jest-cli/build/cli/index.js:158:437
    at new Promise (<anonymous>)
    at Object.<anonymous> (/usr/src/app/node_modules/jest-cli/build/cli/index.js:158:99)
    at Object.run (/usr/src/app/node_modules/jest-cli/build/cli/index.js:30:17)
    at Object.<anonymous> (/usr/src/app/node_modules/jest-cli/bin/jest.js:16:27)
    at Module._compile (node:internal/modules/cjs/loader:1102:14)
npm ERR! code 1
npm ERR! path /usr/src/app
npm ERR! command failed
npm ERR! command sh -c jest --watchAll --verbose

npm ERR! A complete log of this run can be found in:
npm ERR!     /root/.npm/_logs/2020-12-26T10_49_00_358Z-debug.log

我尝试在 docker -compose.yaml文件和dockerfile中使用RUN npm test

我在开发依赖项部分的package.json中配置了jestjest-cli

  "devDependencies": {
    "jest": "22.4.4",
    "jest-cli": "22.4.4",
    "supertest": "^3.0.0"
  }

我错过了什么吗?

标签: node.jsdockerdocker-composejestjsdockerfile

解决方案


添加test-ci你的package.json,并让它在 CI 中运行:

...
scripts": {
    "test": "jest --watchAll --verbose",
    "test-ci": "jest --ci"
  },
...

jest --watchAll需要一些特殊的流程来为我们提供很好的测试,需要的是看文件,终端控制等等。但是,docker 图像通常没有这样的特性来减小它们的图像大小。详细一点,如果要读代码的话jest,不过我有点累。为什么不追究?:)


推荐阅读