ChatGPT解决这个技术问题 Extra ChatGPT

用 Jest 只运行一个测试

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

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

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

如果我接受“重复标志”,它“会将您的问题标记为重复,将未来的读者引导至原始问题并防止在此处发布进一步的答案。”我认为它们并不完全相同,因为每个问题和答案都采用不同的方法。
@jpenna:看看原来的问题。给出了相同的答案。

P
Peter Mortensen

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

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

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

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

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

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

https://i.stack.imgur.com/rBxQS.png

p,然后键入文件名。

https://i.stack.imgur.com/ezrVi.png

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


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

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

来源:Jest CLI Options

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


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

就像这样:

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/…
OMG,这是我花了两天时间尝试解决 --testNamePattern 选项后真正为我工作的唯一选项。显然,我还需要通过测试名称!
P
Peter Mortensen

对我来说,如果我使用这样的两个参数,它会起作用:

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

jest 的 -f 开关是 --onlyFailuresnot 基于文件路径进行过滤(“运行在上一次执行中失败的测试。”)如果您省略 -f,我认为这会起作用
w
webmedia

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