用 Jest 只运行一个测试

Posted

技术标签:

【中文标题】用 Jest 只运行一个测试【英文标题】:Run only ONE test with Jest 【发布时间】:2017-11-10 19:30:00 【问题描述】:

我只想用 Jest 运行一个测试。

我使用it.onlydescribe.only,但它仍然运行大量测试。我认为它运行了自我上次提交以来的所有测试,但它不应该在明确设置 only 标志的情况下出现这种行为,对吧?

是什么导致了这种行为,如何运行单个测试?

【问题讨论】:

How do I run a single test using Jest?的可能重复 如果我接受“重复标志”,它“会将您的问题标记为重复,将未来的读者引导至原始问题并防止在此处发布更多答案。”我认为它们并不完全相同,因为每个问题和答案都采用不同的方法。 @jpenna:看看原来的问题。给出了相同的答案。 【参考方案1】:

Jest 并行化测试运行,它不知道预先测试它 应该运行和不应该运行的。 这意味着当您使用“fit”时,它只会在该文件中运行一项测试。 但它仍会运行您项目中的所有其他测试文件

fitfdescribeit.onlydescribe.only 有相同的目的:跳过其他测试,只运行我。

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


使用 Jest 过滤机制。当你运行你的测试时,

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

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

p,然后输入文件名。

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

【讨论】:

我正在按文件进行过滤,但这很奇怪......所以.only 只适用于同一文件的测试? 我更喜欢那个 .only 的东西,因为我曾经忘记在源代码中撤消 .only 并提交它。 即使跳过了测试,它似乎仍然在评估每个示例中的测试代码。真的没有办法在 2019 年只进行一次测试吗? @adaam 我不确定我是否正确理解了您的问题,所以如果我错了,请纠正我。如果测试位于单独的文件中,则当您使用模式显式运行测试时,只会执行特定文件中的代码。当执行特定文件的代码时,该文件中的整个代码都会被解析,因此即使您将it.onlyit.skip 用于包含语法错误的单个测试,所有测试都将失败。当然,模式排除的文件中的代码将不会被执行。 imgur.com/z9FlQEZ @hinok 在您的 Carousel 组件中粘贴一个 console.log 并重新运行您的测试运行程序。对我来说,即使我在 Carousel 组件中使用 if.only 它 console.logs 的次数与您的监视模式中该组件的跳过/未跳过测试一样多。【参考方案2】:

it.onlydescribe.only 仅适用于它们所在的模块。如果您在过滤多个文件中的测试时遇到问题,可以使用jest -t name-of-spec,过滤与指定名称匹配的测试(与名称匹配)在描述或测试中)。

来源:Jest CLI Options

例如,我像这样关注我当前正在编写的测试(在package.json 中使用测试脚本):npm test -- -t "test foo"

【讨论】:

在我的案例中,这仍然会运行每一个测试,我不知道为什么 我能想到的唯一解释是您传递的字符串参数存在于每个测试名称(或测试describe 块)中。如果是这种情况,您应该缩小到您想要关注的确切测试名称。 这个答案似乎更适合另一个问题:***.com/questions/42827054/…【参考方案3】:

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

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

【讨论】:

【参考方案4】:

是这样的:

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/… 天啊,这是我花了两天时间尝试解决 --testNamePattern 选项后真正为我工作的唯一选项。显然,我也需要通过测试名称!【参考方案5】:

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

【讨论】:

以上是关于用 Jest 只运行一个测试的主要内容,如果未能解决你的问题,请参考以下文章

用 jest @nestjs 运行 e2e 测试

使用grunt运行jest时未找到任何测试

如何在 Jest 测试中使用 nuxt 运行时配置变量

测试无法运行测试用例退出 TypeError: Jest: a transform must export a `process` function

使用 express 完成测试运行后一秒钟 Jest 没有退出

React / Enzyme:运行 Jest / Enzyme 测试时出现 Invariant Violation 错误