编写使用 Flow 验证的 Jest 测试的正确方法是什么?
What's the right way to write Jest tests verified with Flow?
我想人们通常会一起使用 Flow 和 Jest(以及 React),但 Flow 似乎不知道 Jest(或 Jasmine)全局变量。当我将 // @flow
添加到我的测试中时,我收到如下 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 编写一个 Flow 接口,但这看起来很冗长,而且我肯定遗漏了什么。让 Flow 过程 node_modules/jest-cli
似乎没有帮助。
我认为 declare var jest: any;
应该可以解决问题(将它放在每个测试文件的顶部,或者放在您的流程库目录中的某个位置)。
尽管 Jest 是使用流注释编写的,但它们会去除 npm 版本的类型,因此我们不需要 babel 来 运行 它。幸运的是,类型已经在 flow-type 中,所以解决方案很简单(正如评论中提到的):
npm install -g flow-typed
flow-typed install jest@22.x.x # <-- replace the version with the latest
尽管我也必须将这一行添加到我的 .eslintrc.json
:
{
"env": {
"jest": true
}
}
如果您使用 create-react-app 创建项目,则必须手动将 jest 添加到您的 packages.json。否则 flow-typed 不会安装所需的类型定义,因为 create-react-app 不会将此依赖项添加到 packages.json.
yarn add --dev jest
flow-typed install
如果您使用 Create-React-App,则接受的答案将不起作用。以下是使用 CRA 设置 jest 的方法:
1.Install流向你的项目
如果您使用 create-reat-app,here 是此步骤的指南。
yarn add -D flow-bin
yarn run flow init
2。安装 jest 流类型
npx flow-typed install jest@22 // maybe you need a different version
(如果你使用 create-react-app,你可以使用 npx jest -v
来检查你的 jest 版本。)
3。在 config
中注册流类型
(更新:正如@Black 在评论中指出的那样,这一步甚至可能不是必需的)
在您的 .flowconfig
中,将流类型添加到库部分。
...
[libs]
flow-typed
...
我使用 yarn,npm 应该也能正常工作。
您也可以 运行 将它作为一个衬里。
给你:
npm i -D flow-typed && npx flow-typed install jest@"$(npx jest -v)"
我想人们通常会一起使用 Flow 和 Jest(以及 React),但 Flow 似乎不知道 Jest(或 Jasmine)全局变量。当我将 // @flow
添加到我的测试中时,我收到如下 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 编写一个 Flow 接口,但这看起来很冗长,而且我肯定遗漏了什么。让 Flow 过程 node_modules/jest-cli
似乎没有帮助。
我认为 declare var jest: any;
应该可以解决问题(将它放在每个测试文件的顶部,或者放在您的流程库目录中的某个位置)。
尽管 Jest 是使用流注释编写的,但它们会去除 npm 版本的类型,因此我们不需要 babel 来 运行 它。幸运的是,类型已经在 flow-type 中,所以解决方案很简单(正如评论中提到的):
npm install -g flow-typed
flow-typed install jest@22.x.x # <-- replace the version with the latest
尽管我也必须将这一行添加到我的 .eslintrc.json
:
{
"env": {
"jest": true
}
}
如果您使用 create-react-app 创建项目,则必须手动将 jest 添加到您的 packages.json。否则 flow-typed 不会安装所需的类型定义,因为 create-react-app 不会将此依赖项添加到 packages.json.
yarn add --dev jest
flow-typed install
如果您使用 Create-React-App,则接受的答案将不起作用。以下是使用 CRA 设置 jest 的方法:
1.Install流向你的项目
如果您使用 create-reat-app,here 是此步骤的指南。
yarn add -D flow-bin
yarn run flow init
2。安装 jest 流类型
npx flow-typed install jest@22 // maybe you need a different version
(如果你使用 create-react-app,你可以使用 npx jest -v
来检查你的 jest 版本。)
3。在 config
中注册流类型(更新:正如@Black 在评论中指出的那样,这一步甚至可能不是必需的)
在您的 .flowconfig
中,将流类型添加到库部分。
...
[libs]
flow-typed
...
我使用 yarn,npm 应该也能正常工作。
您也可以 运行 将它作为一个衬里。 给你:
npm i -D flow-typed && npx flow-typed install jest@"$(npx jest -v)"