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


359

我可以使用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'

谢谢

Answers:


296

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

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

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


5
不幸的是,这不适用于我。跑步jest bar.spec.jsjest: command not found。我已经确认安装了Jest(npm list -g jest显示jest@0.1.37)。FWIW,当我使用npm test它运行时,使用jest-cli
步枪队

4
是的,jest-cli是正确的模块,请全局安装npm install -g jest-clijest在npm中是…… 其他
ncuillery 2015年

56
不对 npm测试工作并不意味着在全球范围内安装了jest。这仅表示jest已安装在您的项目中。
基耶多2015年

20
就像@ChiedoJohn说的那样。要在不全局安装的情况下运行它,您可以从应用程序的根目录运行它:node_modules/.bin/jest args
Eddie Monge Jr 2015年

3
如果您使用的是默认的茉莉花设置,则可以使用fit代替来集中进行单个测试it
eremzeit '16

380

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

npm test -- SomeTestFileToRun

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

npm test -- --help

无论如何,高呼

npm test -- Foo

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

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

  • 笑话似乎将规范视为前缀。

所以上面的咒语会

  • 运行FooBar.jsFoo.js然后FooZilla.js
  • 但不跑 foo.js

谢谢,不幸的是,运行此命令时我遇到了同样的错误:npm ERR! Error: ENOENT, open '<path to project>/node_modules/<name of file>/package.json'
Musket

1
除了命令行以外,是否还有其他方法可以运行笑话测试?,好像我向现有项目rest api发出发布请求一样,这将给我CSRF令牌问题。我将如何对现有项目设置测试测试?这样它将开始使用“ / rest-api”而不是“ localhost:8000 / rest-api ” 来服务请求
Suyog Sawant 2015年

@SuyogSawant:这不是评论。这是一个问题。您应该在StackOverflow上询问它。
尼古拉斯·凯里

1
就我而言,简单的npm test ToDoForm.test.js工作jest ToDoForm.test.js却没有
Tomasz Mularczyk

关于区分大小写的第二点与上面提供的要求不符。
NSjonas

38

要运行单个测试:

npm test -t ValidationUtil # `ValidationUtil` its my module `ValidationUtil.spec.js`

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


1
太棒了!很棒!
Flavio

21

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

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

node_modules/.bin/jest [args]

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


为我工作;)
wogsland

1
谢谢!这对我非常有用!
艾萨克(Isaac)

5
在其中执行二进制文件的快捷方式node_modules/.bin是使用npx命令。例如npx jest [args]
Sergio Mazzoleni

16

如果使用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",
    ...
  },

}


6

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


5

我们将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在这里使用

那就是对我有用的,因为我们正在使用nx。谢谢。
user906573

4

这就是我在不重新启动测试的情况下对特定文件动态运行测试的方式。我的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

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



1

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


1

您有两种选择:

  • 选项1:命令行。您可以运行以下命令
node '/Users/complete-path-to-you-project/your-project/node_modules/.bin/jest' '/Users/complete-path-to-you-project/your-project/path-to-your-file-within-the-project/your-file.spec.ts'

这样可以避免您全局安装Jest。您使用项目所使用的玩笑。

  • 选项2:如果您使用的是VS Code,则可以使用一个很棒的插件:Jest Runner。它不仅使您可以逐个文件运行测试,还可以通过右键单击要运行的测试来运行特定的套件和规格。

0

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

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

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

jest $PWD/index.spec.ts

注意变量$ PWD的使用

在此处输入图片说明

对于窗户!(要被更新)


0

使用Angular和Jest,您可以将其添加到package.json的“脚本”下

"test:debug": "node --inspect-brk ./node_modules/jest/bin/jest.js --runInBand"

然后要运行特定文件的单元测试,可以在终端中编写此命令

npm run test:debug modules/myModule/someTest.spec.ts

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.