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

Mus*_*ket 283 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'
Run Code Online (Sandbox Code Playgroud)

谢谢

Nic*_*rey 319

你所要做的就是念咒咒语:

npm test -- SomeTestFileToRun
Run Code Online (Sandbox Code Playgroud)

独立--是*nix magic用于标记选项的结尾,意味着(对于NPM)之后每次传递给正在运行的命令,在这种情况下jest.另外,您可以通过说明显示开玩笑用法说明

npm test -- --help
Run Code Online (Sandbox Code Playgroud)

Any呗

npm test -- Foo
Run Code Online (Sandbox Code Playgroud)

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

  • Jest将名称视为区分大小写,因此如果您使用的是不区分大小写但保留大小写的文件系统(如Windows NTFS),则可能会遇到看起来很奇怪的问题.

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

所以上面的咒语会

  • FooBar.js,Foo.jsFooZilla.js
  • 但不要跑 foo.js

  • 你需要npm v2.0才能使用` - `语法. (7认同)
  • 在我的例子中,简单的 `npm test ToDoForm.test.js` 工作,而 `jest ToDoForm.test.js` 没有 (3认同)
  • 除了命令行之外,是否还有其他运行开玩笑测试的方法?,就好像我向我现有的项目 rest api 发出 post 请求一样,它会给我 CSRF 令牌问题。至于我将如何为我现有的项目设置玩笑测试?这样它将开始使用“/rest-api”而不是“http://localhost:8000/rest-api”来处理请求 (2认同)
  • @SuyogSawant:这不是评论。这本身就是一个问题。你应该在 StackOverflow 上问它。 (2认同)
  • 对于 Windows,您需要输入双反斜杠作为文件路径。例如:yarn run test src\\tests\\actions\\auth.test.js (2认同)

ncu*_*ery 226

如果jest有效,则表示全局安装了jest.要运行特定测试,您需要使用npm test命令 - jest将无法运行.

所以你可以直接用jest运行 npm i -g jest-cli

注意:您不必输入测试的完整路径:参数变为regexp,因此它只需要成为完整路径的一部分.

注意2.0:如果您已经习惯 yarn global add jest-cli全局安装jest,请将其更改为jest bar.spec.js

  • 那是不对的.npm test working并不意味着全局安装了jest.它只是意味着在项目中安装了jest. (52认同)
  • 就像@ChiedoJohn说的那样.要在不全局安装的情况下运行它,您可以从应用程序的根目录运行它:`node_modules/.bin/jest args` (11认同)
  • 是的,`jest-cli`是正确的模块,全局安装`npm install -g jest-cli`.npm中的`jest`是...... [别的](https://www.npmjs.com/package/jest) (4认同)
  • 不幸的是,这对我不起作用.运行`jest bar.spec.js`给出`jest:command not found`.我已经确认安装了Jest(`npm list -g jest`显示`jest @ 0.1.37`).FWIW,当我使用`npm test`运行时,它使用`jest-cli`. (3认同)
  • 如果您使用的是默认的jasmine设置,则可以使用`fit`而不是`it`来关注单个测试. (3认同)
  • 由于 regex 文件搜索,运行单个测试文件非常困难。我总是最终将我需要测试的文件重命名为:`bar.specTEST.js` 然后运行 ​​`npm test bar.specTEST.js`。完成后重命名 (2认同)
  • 随着 npx 的出现,你可以运行 `npx jest bar.spec.js` 而不是全局安装 jest。它还会从你的 devDependencies 中读取 jest 版本 (2认同)
  • 您可以使用“npm test”,例如“npm test -- bar.spec.js” (2认同)
  • 我能够通过执行“yarn jest FILE”来运行它 (2认同)

cab*_*i99 26

要进行单独测试:

ValidationUtil是我的模块ValidationUtil.spec.js

npm test -t ValidationUtil
Run Code Online (Sandbox Code Playgroud)

-t - >之后放了一个包含测试名的正则表达式


小智 21

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

npm test -- fileName.jsx 
Run Code Online (Sandbox Code Playgroud)


nPc*_*omp 21

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

在此处输入图片说明

您将在每个和上方都有调试/运行选项。describeit

在此处输入图片说明

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

  • Jest Runner 在某些测试用例中对我不起作用,然后我切换到 VSCode 的 Jest 扩展,它对我有用。https://marketplace.visualstudio.com/items?itemName=Orta.vscode-jest (4认同)

Aer*_*Hil 20

使用npm test并不意味着jest是全局安装.它只是意味着"test"映射到你的package.json中使用jest

以下是在项目的根级别对我有用的内容:

node_modules/.bin/jest [args]
Run Code Online (Sandbox Code Playgroud)

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

  • 在`node_modules / .bin`中执行二进制文件的捷径是使用`npx`命令。例如`npx jest [args]` (4认同)

小智 14

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

yarn test src/lib/myfile.test.js
Run Code Online (Sandbox Code Playgroud)

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

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

}
Run Code Online (Sandbox Code Playgroud)

  • 回复*“删除了相关部分”*:您不是说*“删除了不相关部分”*吗? (2认同)

wbh*_*ing 13

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

yarn test -f "partial-filename" -t "as split node"
Run Code Online (Sandbox Code Playgroud)

npm test,或者jest可以替换yarn test,具体取决于您首选的 JS 捆绑程序。

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

// 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");
  })
})
Run Code Online (Sandbox Code Playgroud)


Spe*_*cer 12

使用 package.json 脚本

在 package.json中"scripts": { "test": "jest" }

npm test -- foo/__tests__/bar.spec.js
Run Code Online (Sandbox Code Playgroud)

直接使用 jest-cli

全局安装:

jest foo/__tests__/bar.spec.js
Run Code Online (Sandbox Code Playgroud)

本地安装:

./node_modules/.bin/jest foo/__tests__/bar.spec.js
Run Code Online (Sandbox Code Playgroud)

使用--testPathPattern

--testPathPattern选项具有将路径作为未命名位置参数传递给 jest-cli 的等效效果。请参阅normalize.ts

./node_modules/.bin/jest --testPathPattern foo/__tests__/bar.spec.js
Run Code Online (Sandbox Code Playgroud)

测试两个或多个特定文件

用逗号或空格分隔文件名:

./node_modules/.bin/jest foo/__tests__/bar.spec.js,foo/__tests__/foo.spec.js
Run Code Online (Sandbox Code Playgroud)
./node_modules/.bin/jest foo/__tests__/bar.spec.js foo/__tests__/foo.spec.js
Run Code Online (Sandbox Code Playgroud)

--testPathPattern多次通过:

./node_modules/.bin/jest --testPathPattern foo/__tests__/bar.spec.js --testPathPattern foo/__tests__/foo.spec.js
Run Code Online (Sandbox Code Playgroud)


bma*_*ggi 8

如果你正在运行npm >= 5.2.0并且你已经在本地安装了 Jest 作为devDependencieswith npm i -d jest,你可以通过执行在特定文件上运行 Jest npx jest /path/to/your/spec.js


小智 8

使用这个命令:

npx jest test --runTestsByPath <path-to-file>
Run Code Online (Sandbox Code Playgroud)


TmT*_*ron 7

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

npm test <ng-project> -- --testFile "file-name-part"
Run Code Online (Sandbox Code Playgroud)

笔记:

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


ger*_*gro 7

当时,我是用以下方法做到的:

yarn test TestFileName.spec.js
Run Code Online (Sandbox Code Playgroud)

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


kin*_*leo 6

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

npx jest foo.test.js
Run Code Online (Sandbox Code Playgroud)


dek*_*eko 5

这就是我在特定文件上动态运行测试而无需重新启动测试的方式。

\n

我的 React 项目创建为create-react-app.

\n

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

\n

这就是我在终端中看到的测试结果:

\n
Test Suites: 16 passed, 16 total\nTests:       98 passed, 98 total\nSnapshots:   0 total\nTime:        5.048s\nRan all test suites.\n\nWatch Usage: Press w to show more.\n
Run Code Online (Sandbox Code Playgroud)\n

W

\n
Watch Usage\n \xe2\x80\xba Press f to run only failed tests.\n \xe2\x80\xba Press o to only run tests related to changed files.\n \xe2\x80\xba Press q to quit watch mode.\n \xe2\x80\xba Press p to filter by a filename regex pattern.\n \xe2\x80\xba Press t to filter by a test name regex pattern.\n \xe2\x80\xba Press Enter to trigger a test run.\n
Run Code Online (Sandbox Code Playgroud)\n

然后按P

\n
Pattern Mode Usage\n \xe2\x80\xba Press Esc to exit pattern mode.\n \xe2\x80\xba Press Enter to filter by a filenames regex pattern.\n\n pattern \xe2\x80\xba\n\n Start typing to filter by a filename regex pattern.\n\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
Pattern Mode Usage\n \xe2\x80\xba Press Esc to exit pattern mode.\n \xe2\x80\xba Press Enter to filter by a filenames regex pattern.\n\n pattern \xe2\x80\xba login/index\n\n Pattern matches 1 file\n \xe2\x80\xba src/containers/Login/index.es6.test.js\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n


Soh*_*edM 5

也可以通过以下方式实现:

jest --findRelatedTests path/to/fileA.js
Run Code Online (Sandbox Code Playgroud)

参考(Jest CLI 选项

如何在 Nx monorepo 中实现这一点?这是答案(在目录中/path/to/workspace):

npx nx test api --findRelatedTests=apps/api/src/app/mytest.spec.ts
Run Code Online (Sandbox Code Playgroud)

参考及更多信息:如何在 Nx #6 中测试单个 Jest 测试文件


Sid*_*chu 5

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

npm test <fileName.test.js>

// For example
npm test utils.test.js

Run Code Online (Sandbox Code Playgroud)

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


小智 5

当您使用 jest 时,Jest 和 Jest Runner 是非常有用的 VSCode 扩展。

Jest自动测试运行器

Jest Runner在测试上方添加“运行 | 调试”代码镜头以运行或调试单个测试。

“运行|调试”代码镜头


Git*_*Jha 5

下面的命令对我有用。
npx jest -i file-name

不需要指定文件的完整路径,文件名就足够了。

编辑:找到另一种方法来做到这一点。
npm run test:functional -i file-name用于功能测试
npm run test:integration -i file-name用于集成测试


Byu*_*usa 5

如果您使用的是纱线,请执行此操作

yarn test nameofthefile
Run Code Online (Sandbox Code Playgroud)

例如:

yarn test file.test.js
Run Code Online (Sandbox Code Playgroud)