为什么“npm test”只在一项测试上花费这么长时间?

lib*_*bby 6 npm reactjs jestjs babel-jest create-react-app

npx create-react-app my-app运行后npm test我得到以下信息:

\n\n
 PASS  src/App.test.js\n  \xe2\x9c\x93 renders learn react link (48ms)\n\nTest Suites: 1 passed, 1 total\nTests:       1 passed, 1 total\nSnapshots:   0 total\nTime:        2.555s\nRan all test suites.\n\nWatch Usage: Press w to show more.\n
Run Code Online (Sandbox Code Playgroud)\n\n

为什么需要2.5s运行整个套件,而只48ms运行测试?\n我怎样才能加快这个过程?\n谢谢!

\n\n

更新:我正在运行这台计算机:

\n\n

在此输入图像描述

\n

Tyg*_*rTy 5

答案非常简单:如果您的测试需要 48 毫秒,而套件的整个持续时间需要 2.555 秒,那么正在运行的其他代码会占用另外 2.507 秒。

换句话说,在这一测试之前和之后必须运行的代码比您在不查看jest库框架代码的情况下看到的代码要多得多。

这就是为什么该套件的运行时间(2.5 秒)比测试总和(48 毫秒)长。


为了使测试更简单(也更容易)和更自动化,有很多“幕后”代码允许您:

  • 按照自己的方式编写测试,即以易于理解/编写的方式编写,但不一定是编译器实际看到的方式;它将被编译成其他东西
  • 找到每个测试所需的文件;将所有指定的文件放在一起需要一些时间
  • 将指定的文件(例如使用 webpack)编译为您在构建中指定的文件,
  • 构建/编译一个测试环境来运行您的代码,jest模拟浏览器以使您的代码与在生产中运行的代码相似
  • 运行测试
  • 然后输出结果

可以将其与租用拼车进行类比。上车需要支付最低费用,但一旦到达,就需要加上每分钟或每英里的费用。因此,租一辆自行车的费用为 2.507 美元,再加上每英里 4.8 美分。


一旦你的测试环境一开始就做好了,你后续的测试将不会每次都需要 2.5 秒的时间来运行。

与时间相关的笑话的有用链接:


加快测试速度的方法是:


另一个非代码选项是使用更好/更快的 CPU 或使用更高效的操作系统。

与我在 Windows 10、华硕 GL502VMK 上的 6.17 秒相比,使用默认 create-react-app 的 2.555 秒要快得多。

在 Ubuntu 20 桌面虚拟机(上述同一台 Windows 10 计算机上的 Virtualbox,12GB 主机 RAM 中的 8 个,8 个主机 CPU 中的 4 个)上运行它,需要 2.105 秒。


您可以找到很多抱怨 Jest 和执行时间的文章,因此看来这不一定只是您的问题。Jest 的某些部分速度并不快。