仅用Jest运行一项测试


95

很简单,我只想用Jest运行一个测试。

我放it.only或,describe.only但它仍然运行大量测试。我认为它可以运行自上次提交以来的所有测试,但它不应在only显式设置了标志的情况下就具有这种行为,对吗?

是什么导致此行为,以及如何运行单个测试?



如果我接受“重复标记”,它将“将您的问题标记为重复,将以后的读者引向原始问题,并阻止在此处发布进一步的答案。” 我不认为它们是完全相同的,因为每个问题和答案都采用不同的方法。
jpenna

@jpenna:看看原始问题。给出了相同的答案。
Dan Dascalescu,

Answers:


122

Jest使测试运行并行化,并且它不预先知道应该运行哪些测试以及不应该运行哪些测试。这意味着,当您使用“ fit”时,它将仅在该文件中运行一个测试,但仍将在项目中运行所有其他测试文件

fitfdescribe并且it.onlydescribe.only有异曲同工之妙,跳过其他测试,只运行了我。

资料来源:https : //github.com/facebook/jest/issues/698#issuecomment-177673281


jest当您运行测试时,请使用过滤机制

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

您可以通过testname或过滤测试filename,只需按照终端中的说明进行操作即可

在此处输入图片说明

p,然后输入文件名

在此处输入图片说明

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


1
我正在按文件进行此过滤,但这很奇怪...因此,该方法.only仅适用于同一文件的测试?
jpenna

2
我更喜欢.only东西,因为我曾经忘记在源代码中撤消.only并提交。
Dziamid

3
即使跳过了测试,在每个示例中似乎仍然要评估被测代码。真的有没有办法只在2019年进行一次测试?
adaam

@adaam我不确定我是否正确理解了您的问题,所以如果我错了,请纠正我。如果测试在单独的文件中,则在使用模式显式运行测试时,仅执行特定文件中的代码。当执行特定文件的代码时,该文件中的整个代码将被解析,因此即使您使用it.onlyit.skip针对包含语法错误的单个测试,所有测试都将失败。当然,将不会执行模式所排除的文件中的代码。imgur.com/z9FlQEZ-戴维德·卡拉宾
Dawid Karabin),

@hinok将console.log粘贴在Carousel组件中,然后重新运行测试运行器。对我来说,即使我使用if.only了Carousel组件中的console.logs次数也与您在观看模式中对该组件进行的跳过/跳过测试一样多。
adaam

29

it.only并且describe.only仅适用于它们所在的模块。如果在过滤多个文件中的测试时遇到问题,则可以使用jest -t name-of-spec,过滤与规格名称匹配的测试(与describe或test中的名称匹配)。
来源:https : //facebook.github.io/jest/docs/en/cli.html

例如,我将重点放在当前正在编写的测试中(使用的测试脚本package.json):
npm test -- -t "test foo"


4
在我的情况下,这仍然会运行每个测试,我不知道为什么
肯尼(Kenny

我能想到的唯一解释是,您正在传递每个测试名称(或测试describe块)中都存在的字符串参数。如果是这种情况,您应该缩小到要关注的确切测试名称。
rodgobbi

这个答案似乎更适合另一个问题:stackoverflow.com/questions/42827054/...
千木郷

8

就像这样:

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

它会测试所有具有名称sometest.test.js并基于-t选项匹配的文件,如果您只想测试特定文件,则可以执行以下操作:

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

对于那些希望实现在VSCode此选项launch.json的配置文件,将在特定的测试案例引发的测试:medium.com/better-programming/...
格斯

8

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

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
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.