仅使用Jest运行一个测试

jutyujz0  于 2023-02-01  发布在  Jest
关注(0)|答案(6)|浏览(277)

我只想对杰斯特做一个测试。
我使用了it.onlydescribe.only,但它仍然运行了大量的测试,我认为它运行了我上次提交后的所有测试,但它不应该在显式设置only标志的情况下有这种行为,对吗?
是什么导致了这种行为?我如何运行一个测试?

4ngedf3f

4ngedf3f1#

Jest并行化测试运行,它不知道哪些测试应该运行,哪些不应该运行。这意味着当你使用"fit"时,它只会运行那个文件中的一个测试。但是它仍然会运行你项目中的所有其他测试文件
fitfdescribeit.onlydescribe.only具有相同的用途:跳过其他测试只运行我的。
图片来源:www.example.comhttps://github.com/facebook/jest/issues/698#issuecomment-177673281
使用Jest过滤机制。当你运行你的测试时,

jest --config=jest.config.json --watch

您可以通过testnamefilename过滤测试,只需按照终端中的说明操作即可。

p,然后键入文件名。

然后,您可以使用describe.onlyit.only,这将跳过过滤后的测试文件中的所有其他测试。

w3nuxt5m

w3nuxt5m2#

it.onlydescribe.only仅适用于它们所在的模块。如果在过滤多个文件中的测试时遇到问题,可以使用jest -t name-of-spec,过滤与指定名称匹配的测试(与describe或test中的名称匹配)。
来源:Jest CLI Options
例如,我关注我目前正在编写的测试,如下所示(使用package.json中的测试脚本):
npm test -- -t "test foo"

dohp0rv5

dohp0rv53#

事情是这样的:

jest sometest.test.js -t "some expression to match a describe or a test"

它将测试所有名称为sometest.test.js并基于-t选项匹配的文件。如果您只想测试特定的文件,您可以这样做:

jest src/user/.../sometest.test.js
bqf10yzr

bqf10yzr4#

对于我来说,如果我使用如下两个参数,它就可以工作:

yarn test --watch -f "src/...fullpath.../reducer.spec.js" -t "Name of the test"

旗帜:

--watch: is optional

-f: will do filtering of your files, so if you have a lot of tests with the same name, specify the full path to the exact file

-t: works with 'describe' name or 'it' name of your test
rpppsulh

rpppsulh5#

我创建了一个命令,让Jest像你(和我)期望的那样工作。这是正在进行的工作,但应该像这样工作:
从包含.only tests/descripts的文件运行测试,如果没有.only,则运行所有文件。

grep --exclude-dir=node_modules -rl . -e 'test.only\|it.only\|describe.only' --null | tr '\n' ' ' | xargs -0 npx jest | grep . || npx jest

即使这在一些边缘情况下不起作用,你也可以把它作为一个参考。我可能会保持这个更最新的here
您可以为它创建一个别名,将它放在shell脚本或package.json脚本中。
更新:最后的| grep . || npx jest是一个变通方法,因为xargs应该在没有输入的情况下运行一次,但是在我的机器上没有。

gab6jxml

gab6jxml6#

尝试输入完整路径会导致0与该模式匹配,即使该文件存在并且有几个Assert。

相关问题