如何使用Jest测试单个文件?

我可以使用Jest测试多个文件,但无法弄清楚如何测试单个文件。

我有:

  • npm install jest-cli --save-dev
  • 更新package.json:`{...“脚本”:{“测试”:“玩笑”} ...}
  • 编写了许多测试。

运行npm test按预期进行(当前运行14个测试)。

如何测试单个文件,例如test app/foo/__tests__/bar.spec.js

我尝试npm test app/foo/__tests__/bar.spec.js从项目根目录运行,但是出现以下错误:

npm ERR! Error: ENOENT, open '<path to project>/node_modules/app/foo/__tests__/bar.spec.js/package.json'

谢谢

SamStafan十三2020/03/18 16:54:52

Jest将使用您传递的内容作为正则表达式模式那将匹配。

如果要运行特定的测试文件。那么最好的方法就是精确地找到它的完整路径。(您可以精确定位某个相对路径,例如(src / XFolder / index.spec.ts))。

在目录和linux中提供完整路径的最简单方法是:

jest $PWD/index.spec.ts

注意变量$ PWD的使用

在此处输入图片说明

对于窗户!(要被更新)

小小LEY伽罗2020/03/18 16:54:52

我刚刚在全球范围内安装了jest,然后又运行jest myFileToTest.spec.js

Harry小宇宙2020/03/18 16:54:52

我们将nrwl-nxangular一起使用在这种情况下,我们可以使用以下命令:

npm test <ng-project> -- --testFile "file-name-part"

笔记:

  • npm test将运行在中指定的测试脚本package.json"test:client": "ng test client"
  • 因此,其余的cmd将通过ng测试
    • <ng-project> 是位于的项目名称 angular.json
      • 省略此参数时,将使用("defaultProject"在中指定angular.json)(因此,如果测试不在默认项目中,则必须指定它)
    • 接下来,我们必须检查使用了哪个生成器:
      • angular.json导航至"project"- "<ng-project>"- "architect"-"test"
      • 并检查"builder",在我们的例子中是:"@nrwl/jest:jest"
    • 现在我们知道了生成器,我们需要找到可用的cmd-line参数
      • 在命令行上,运行npm test server -- --help以查看所有可用选项
      • 或查看在线文档
    • 选项之一是--testFile在这里使用
理查德路易2020/03/18 16:54:52

您可以使用以下文件名npm test --

npm test -- fileName.jsx 
LEYMandy2020/03/18 16:54:52

这就是我在不重新启动测试的情况下对特定文件动态运行测试的方式。我的React项目已创建为create-react-app

因此它会监视测试的更改,并在我进行更改时自动运行测试。

这就是我在终端上的测试结果结尾处看到的。

Test Suites: 16 passed, 16 total
Tests:       98 passed, 98 total
Snapshots:   0 total
Time:        5.048s
Ran all test suites.

Watch Usage: Press w to show more.

按W

Watch Usage
 › Press f to run only failed tests.
 › Press o to only run tests related to changed files.
 › Press q to quit watch mode.
 › Press p to filter by a filename regex pattern.
 › Press t to filter by a test name regex pattern.
 › Press Enter to trigger a test run.

然后按P

Pattern Mode Usage
 › Press Esc to exit pattern mode.
 › Press Enter to filter by a filenames regex pattern.

 pattern ›

 Start typing to filter by a filename regex pattern.

这是在我想运行“登录”文件夹中的“ index.es6.js”文件之后

Pattern Mode Usage
 › Press Esc to exit pattern mode.
 › Press Enter to filter by a filenames regex pattern.

 pattern › login/index

 Pattern matches 1 file
 › src/containers/Login/index.es6.test.js

那就是我如何在特定文件上运行测试。

2020/03/18 16:54:52

如果您正在运行,npm >= 5.2.0并且已经在本地安装了jest devDependencies,则npm i -d jest可以通过执行以下操作在特定文件上运行jestnpx jest /path/to/your/spec.js

NearDavaid2020/03/18 16:54:52

也可以通过

$ jest --findRelatedTests path/to/fileA.js

ref(https://jestjs.io/docs/en/cli#running-from-the-command-line

如何在Nx monorepo中实现,这就是答案

user@host:/path/to/workspace$ npx nx test api --findRelatedTests=apps/api/src/app/mytest.spec.ts

参考和更多信息(https://github.com/satminav/nx-qa/issues/6

小小猪猪卡卡西2020/03/18 16:54:51

如果使用yarn,则可以在以下位置直接添加.spec.js.test.js文件:

yarn test src/lib/myfile.test.js

这是我package.json用jest install作为本地软件包安装的一部分(删除了相关部分):

{
...
  "scripts": {
    "test": "jest",
    "testw": "jest --watch",
    "testc": "jest --coverage",
...
  },
  "devDependencies": {
    "jest": "^18.1.0",
    ...
  },

}
Tony番长L2020/03/18 16:54:51

您所要做的就是吟诵魔法咒:

npm test -- SomeTestFileToRun

独立版本--是* nix的魔术,用于标记选项的结尾,这意味着(对于NPM)此后的所有内容都传递给正在运行的命令jest顺便说一句,您可以说出笑话用法说明

npm test -- --help

无论如何,高呼

npm test -- Foo

在命名文件(FooBar.js)中运行测试不过,您应该注意:

  • Jest将名称视为区分大小写,因此,如果使用不区分大小写但保留大小写的文件系统(如Windows NTFS),则可能会遇到奇怪的情况。

  • Jest似乎将规范视为前缀。

所以上面的咒语会

  • 运行FooBar.jsFoo.js然后FooZilla.js
  • 但不跑 foo.js
小胖猿2020/03/18 16:54:51

使用npm test并不意味着开玩笑会在全球范围内安装。这只是意味着“ test”被映射为在您的package.json中使用jest

以下是对我有效的项目的根目录:

node_modules/.bin/jest [args]

args可以是您要运行的测试文件,也可以是包含多个文件的目录。

小小乐2020/03/18 16:54:51

要运行个别测试:

ValidationUtil其我的模块ValidationUtil.spec.js

npm test -t ValidationUtil

-t->放置包含测试名称的正则表达式后

伽罗2020/03/18 16:54:51

为了运行特定的测试,您需要使用jest命令。npm test不管用。jest直接在命令行上访问,请通过npm i -g jest-cli安装它yarn global add jest-cli

然后只需使用即可运行您的特定测试jest bar.spec.js

注意:您不必输入测试文件的完整路径。该参数被解释为正则表达式。完整路径的唯一标识文件的任何部分都足够。