Jestjs 什么';用流验证Jest测试的正确方法是什么?

Jestjs 什么';用流验证Jest测试的正确方法是什么?,jestjs,flowtype,Jestjs,Flowtype,我想象人们通常一起使用Flow和Jest(以及React),但Flow似乎不知道Jest(或Jasmine)globals。当我将/@flow添加到测试中时,会出现如下流错误: src/__tests__/Thing-test.js:3 3: jest.unmock('../Thing') ^^^^ identifier `jest`. Could not resolve name src/__tests__/Thing-test.js:7 7: describe('Thin

我想象人们通常一起使用Flow和Jest(以及React),但Flow似乎不知道Jest(或Jasmine)globals。当我将
/@flow
添加到测试中时,会出现如下流错误:

src/__tests__/Thing-test.js:3
  3: jest.unmock('../Thing')
     ^^^^ identifier `jest`. Could not resolve name

src/__tests__/Thing-test.js:7
  7: describe('Thing', () => {
     ^^^^^^^^ identifier `describe`. Could not resolve name

src/__tests__/Thing-test.js:8
  8:   it('does stuff', () => {
       ^^ identifier `it`. Could not resolve name

我可以为Jest/Jasmine编写一个流接口,但这似乎很长,而且我肯定遗漏了什么。让流程处理
node\u模块/jest cli
似乎没有帮助。

我认为
声明var jest:any
应该可以做到这一点(将它放在每个测试文件的顶部,或者放在您的flow lib目录中的某个地方)。

尽管Jest是用流注释编写的,但它们为npm版本剥离了类型,所以我们不需要babel来运行它。幸运的是,这些类型已经是流类型,因此解决方案非常简单(如注释中所述):


如果使用create react app创建项目,则必须手动将jest添加到packages.json中。否则,flow typed将不会安装所需的类型定义,因为create react app不会将此依赖项添加到packages.json

yarn add --dev jest
flow-typed install

如果您使用创建反应应用程序,则接受的答案无效。以下是您如何与CRA开玩笑:

1.将流程安装到项目中

如果您使用CreateReat应用程序,请参阅此步骤的指南

yarn add -D flow-bin
yarn run flow init
2。安装jest流类型

npx flow-typed install jest@22 // maybe you need a different version
(如果使用CreateReact应用程序,您可以使用NPXJEST-v检查jest版本。)

3。在配置中输入的注册流

(更新:正如@Black在评论中指出的,这一步甚至可能不是必需的)

.flowconfig
中,将键入的流添加到libs部分

...
[libs]
flow-typed
...

我使用纱线,npm的工作原理应该是一样的。

您也可以将其作为一个衬里运行。 给你:

npm i-D流类型化和npx流类型化安装jest@“$(npx jest-v)”

您可以为Jest创建/安装声明文件。或者使用:
flow-typed-install-jest
。还可以看看这个存储库,它配置了所有内容:这对我来说不起作用。WebStorm仍然显示一个流错误:标识符“it”。无法解析名称我的项目是用create react应用程序设置的。我没有.eslintrc.json文件。请确保在
.flowconfig
[libs]
部分中也有
流类型化的
。您不需要显式地将
流类型化的
添加到
.flowconfig
,至少现在不是这样:在您停止
之前,您可能无法修复。flow cache可能会导致严重的挫折感。我有一个与@bedouger类似的问题,他已经完成了所有的安装(已安装插件、libdef、设置配置规则、重置flow server),到目前为止还没有任何乐趣。如果我能找到解决方案,我会回到这里并添加适当的反馈。根据Dan Abramov的说法,不建议在CRA中安装Jest:如果您的包中同时包含react脚本和Jest。json将来会出大问题。以上答案假设您已通过
npm安装-g flow-typed
在全球安装了
flow-typed
。或者,通过
warn add-D flow-typed
将其作为项目依赖项添加,然后您可以运行它
npx flow-typed安装
默认情况下,flow-typed
被添加到
[libs]
部分。无需手动执行@Black感谢您指出这一点,我更新了我的答案以反映您的评论。对于我来说,只有在添加
[libs]
时才有效。谢谢你
npx flow-typed install jest@22 // maybe you need a different version
...
[libs]
flow-typed
...