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

时间:2015-02-25 17:42:01

标签: node.js jestjs

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

我有:

  • 运行npm install jest-cli --save-dev
  • 更新了package.json:`{...“脚本”:{“test”:“jest”} ...}
  • 写了一些测试。

运行npm test按预期工作(目前运行14次测试)。

如何测试单个文件,例如测试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'

由于

26 个答案:

答案 0 :(得分:245)

你所要做的就是念咒语:

npm test -- SomeTestFileToRun

独立--是用于标记选项结尾的* nix魔术,意味着(对于NPM)之后每次传递给正在运行的命令,在本例中为jest。另外,您可以通过说

来显示开玩笑用法说明
npm test -- --help

无论如何,念诵

npm test -- Foo

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

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

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

所以上面的咒语将

  • 运行FooBar.jsFoo.jsFooZilla.js
  • 但不要运行foo.js

答案 1 :(得分:140)

要运行特定测试,您需要使用jest命令。 npm test无效。要直接在命令行上访问jest,请通过npm i -g jest-cliyarn global add jest-cli进行安装。

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

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

答案 2 :(得分:16)

进行个别测试:

ValidationUtil是我的模块ValidationUtil.spec.js

npm test -t ValidationUtil

-t - &gt;之后它放了一个包含测试名称的正则表达式

答案 3 :(得分:16)

如果您安装了 Visual Studio Code 插件Jest Runner

Enter image description here

您将在每个 describeit 上方有 Debug/Run 选项。

Enter image description here

您可以在 Visual Studio Code 中打开您的测试文件,然后单击这些选项之一。

答案 4 :(得分:15)

使用npm test并不代表jest是全局安装。它只是意味着&#34;测试&#34;在package.json中使用jest映射到

以下是在项目的根级别对我有用的东西:

node_modules/.bin/jest [args]

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

答案 5 :(得分:11)

如果您使用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 :(得分:6)

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

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

注意:

  • npm test将运行package.json中指定的测试脚本: "test:client": "ng test client"
  • 因此,该cmd的其余部分将传递给ng test
    • <ng-project>angular.json中项目的名称
      • 省略此参数时,将使用{{1}中指定的"defaultProject"(因此,如果测试不在默认项目中,则必须指定它)
    • 接下来,我们必须检查使用哪个生成器:
      • angular.json中导航至angular.json-"project"-"<ng-project>"-"architect"
      • 并检查"test",在我们的示例中为:"builder"
    • 现在我们知道了构建器,我们需要找到可用的cmd-line参数
      • 在命令行上,运行"@nrwl/jest:jest"以查看所有可用选项
      • 或选中online documentation
    • 其中一个选项是npm test <ng-project> -- --help,在这里使用

答案 7 :(得分:4)

如果您运行npm >= 5.2.0,并且在devDependencies中以npm i -d jest的形式在本地安装了jest,则可以通过执行npx jest /path/to/your/spec.js

在特定文件上运行jest

答案 8 :(得分:4)

一个有效的简单解决方案:

yarn test -g fileName

npm test -g fileName

示例:

yarn test -g cancelTransaction

npm test -g cancelTransaction

有关测试过滤器的更多信息:

Test Filters
--fgrep, -f Only run tests containing this string [string]
--grep, -g Only run tests matching this string or regexp [string]
--invert, -i Inverts --grep and --fgrep matches [boolean]

答案 9 :(得分:3)

要在特定文件中运行特定测试:

yarn test -f "partial-filename" -t "as split node"

npm testjest 可以替换 yarn test,具体取决于您首选的 JS 打包器。

这只会尝试在包含 some-partial-filename 的文件中查找测试,并且在这些文件中,测试需要有一个 describeit 指令,其中提到“作为拆分节点”,例如

// In cool-partial-filename.js
describe("with a less indented sibling", () => {
  it("should create a new check-list-item with the same indent as split node", () => {
    console.log("This would run with the invocation above");
  })
})

答案 10 :(得分:1)

使用Angular和Jest,您可以将其添加到文件“ ems”中的 package.json 中:

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

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

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

答案 11 :(得分:1)

如果你不想全局安装 jest,你可以使用

npx jest foo.test.js

答案 12 :(得分:1)

简单的方法是运行单个单元测试文件,就是在终端的根文件夹内运行命令。

npm test <fileName.test.js>

// For example
npm test utils.test.js

我还尝试了 Visual Studio Code 的 Jest Runner 扩展,效果很好。

答案 13 :(得分:1)

摘自Jest文档

  "scripts": {
    "test": "jest path/to/my-test.js"
  }

使用

运行
 npm run test

答案 14 :(得分:1)

无需传递完整路径。只需使用正则表达式模式即可。

请参见 --testLocationInResults

yarn jest --testNamePattern my_test_name
yarn jest -t=auth
yarn jest -t component # This will test all whose test name contains `component`

yarn jest --testPathPattern filename # This will match the file path
yarn jest filename # This will match the file path, the same with above

答案 15 :(得分:1)

也可以通过

实现

$ 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

答案 16 :(得分:1)

您可以将文件名与npm test --一起使用:

npm test -- fileName.jsx 

答案 17 :(得分:1)

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

这就是我对特定文件运行测试的方式。

答案 18 :(得分:0)

import LoggerService from '../LoggerService ';

describe('Method called****', () => {
  it('00000000', () => {
    const logEvent = jest.spyOn(LoggerService, 'logEvent');
    expect(logEvent).toBeDefined();
  });
});

用法:

npm test -- __tests__/LoggerService.test.ts -t '00000000'

答案 19 :(得分:0)

对于nestjs用户,简单的替代方法是使用

auto

Nestjs预先配置了测试文件的正则表达式,以查找是否开玩笑 一个简单的例子是-

npm test -t app-util.spec.ts

(这是我的规格文件名)

不需要给出完整的路径,因为出于麻将根据配置来搜索规格文件,在nestjs的情况下默认可用。

npm test -t <name of the spec file to run>

答案 20 :(得分:0)

这时,我通过使用以下方法来做到这一点:

yarn test TestFileName.spec.js

您不应输入完整的路径。在Windows 10机器上对我来说有效。

答案 21 :(得分:0)

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

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

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

b

请注意变量 $ PWD 的使用。

enter image description here

对于Windows! (待更新)

答案 22 :(得分:0)

您有两个选择:

  • 选项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。它不仅使您可以逐个文件运行测试,还可以通过右键单击要运行的测试来运行特定的套件和规格。

答案 23 :(得分:0)

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

答案 24 :(得分:0)

使用 package.json:

  "scripts": {
    "test": "jest --coverage",
    "start": "node index.js"
  }

以下对我有用:

npm test -f comm -- -t=first

它将查找文件名中包含“comm”的所有文件,并且只运行找到的文件中包含“first”的测试。

答案 25 :(得分:-1)

“测试”:“ jest api / ds_server / ds_server.test.js”