用 Jest 只运行一个测试
Posted
技术标签:
【中文标题】用 Jest 只运行一个测试【英文标题】:Run only ONE test with Jest 【发布时间】:2017-11-10 19:30:00 【问题描述】:我只想用 Jest 运行一个测试。
我使用it.only
或describe.only
,但它仍然运行大量测试。我认为它运行了自我上次提交以来的所有测试,但它不应该在明确设置 only
标志的情况下出现这种行为,对吧?
是什么导致了这种行为,如何运行单个测试?
【问题讨论】:
How do I run a single test using Jest?的可能重复 如果我接受“重复标志”,它“会将您的问题标记为重复,将未来的读者引导至原始问题并防止在此处发布更多答案。”我认为它们并不完全相同,因为每个问题和答案都采用不同的方法。 @jpenna:看看原来的问题。给出了相同的答案。 【参考方案1】:Jest 并行化测试运行,它不知道预先测试它 应该运行和不应该运行的。 这意味着当您使用“fit”时,它只会在该文件中运行一项测试。 但它仍会运行您项目中的所有其他测试文件。
fit
、fdescribe
和 it.only
、describe.only
有相同的目的:跳过其他测试,只运行我。
来源:https://github.com/facebook/jest/issues/698#issuecomment-177673281
使用 Jest 过滤机制。当你运行你的测试时,
jest --config=jest.config.json --watch
您可以通过testname
或filename
过滤测试。只需按照终端中的说明进行操作即可。
按p
,然后输入文件名。
然后您可以使用describe.only
和it.only
,这将跳过过滤后的测试文件中的所有其他测试。
【讨论】:
我正在按文件进行过滤,但这很奇怪......所以.only
只适用于同一文件的测试?
我更喜欢那个 .only 的东西,因为我曾经忘记在源代码中撤消 .only 并提交它。
即使跳过了测试,它似乎仍然在评估每个示例中的测试代码。真的没有办法在 2019 年只进行一次测试吗?
@adaam 我不确定我是否正确理解了您的问题,所以如果我错了,请纠正我。如果测试位于单独的文件中,则当您使用模式显式运行测试时,只会执行特定文件中的代码。当执行特定文件的代码时,该文件中的整个代码都会被解析,因此即使您将it.only
或it.skip
用于包含语法错误的单个测试,所有测试都将失败。当然,模式排除的文件中的代码将不会被执行。 imgur.com/z9FlQEZ
@hinok 在您的 Carousel 组件中粘贴一个 console.log 并重新运行您的测试运行程序。对我来说,即使我在 Carousel 组件中使用 if.only
它 console.logs 的次数与您的监视模式中该组件的跳过/未跳过测试一样多。【参考方案2】:
it.only
和describe.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
【讨论】:
对于那些希望在 VSCodelaunch.json
配置文件中实现此选项的人,它将在特定测试用例中触发测试:medium.com/better-programming/…
天啊,这是我花了两天时间尝试解决 --testNamePattern 选项后真正为我工作的唯一选项。显然,我也需要通过测试名称!【参考方案5】:
尝试输入完整路径会导致 0 个匹配该模式,即使该文件存在并且有几个断言。
【讨论】:
以上是关于用 Jest 只运行一个测试的主要内容,如果未能解决你的问题,请参考以下文章
测试无法运行测试用例退出 TypeError: Jest: a transform must export a `process` function
使用 express 完成测试运行后一秒钟 Jest 没有退出
React / Enzyme:运行 Jest / Enzyme 测试时出现 Invariant Violation 错误