使用 flowtype 静态检查 mocha 测试代码
Posted
技术标签:
【中文标题】使用 flowtype 静态检查 mocha 测试代码【英文标题】:using flowtype to statically check mocha test code 【发布时间】:2017-04-01 16:25:20 【问题描述】:我有一些复杂的 Mocha 代码,我想用 FlowType 进行静态检查,为什么不呢?
下面是一个最小的复制:
/* @flow */
describe('it', function ()
it('fails', function()
const s: number = 'flow spots this error';
);
);
当我对此运行 Flow 时,Flow 确实发现了将 string
分配给 number
的问题,这表明该方法在某种程度上是有效的。
但是,我也得到:
test/test.js:4
4: describe('it', function ()
^^^^^^^^ identifier `describe`. Could not resolve name
test/test.js:5
5: it('fails', function()
^^ identifier `it`. Could not resolve name
... 显然 Mocha 测试定义在这些函数全局可用的环境中运行,但查看测试文件并没有任何东西可以让 Flow 检测到。
我不确定这些问题是 Mocha 特有的,但我觉得我不能自信地从更广泛的角度来阐述这个问题,所以我的问题是:
-
如何在不抑制包含
describe
或it
的每一行的情况下让 Flow 类型检查 Mocha 测试代码?
这是更广泛的情况的一个实例吗?如果是,后者会是什么?
【问题讨论】:
【参考方案1】:第三方库通常需要定义文件,即包含给定库的所有类型信息的文件。
此时需要mocha的定义文件,幸好flow-typed.提供
安装它
npm install -g flow-typed
然后运行
flow-typed install
它将自动为您的依赖项安装所有可用的定义文件,包括 mocha。
【讨论】:
mocha 的流式defs 目前是一个几乎没用的自动生成存根,它们不能修复describe
和it
上的错误。
@Andy 您应该将导入更改为: import describe, it from 'mocha';
@paulojean 不,尽管如此,还是自己试试吧。如果你import describe from 'mocha'
然后写describe('blah', 'blah', 'blah')
,你不会得到任何流错误。虽然我猜这不是什么大不了的事。
这对我不起作用。我收到Cannot reference type it [1] from a value position.
之类的错误【参考方案2】:
您可以简单地声明流describe
、it
变量。
/* @flow */
declare var describe: any;
declare var it: any;
describe('it', function ()
it('fails', function()
const s: number = 'flow spots this error';
);
);
【讨论】:
我认为这个解决方案没有帮助。我认为它会成功消除流类型错误,但由于使用了any
,它不会对相关函数添加任何有意义的类型限制。
是的..你也可以删除流类型然后,有什么意义:D以上是关于使用 flowtype 静态检查 mocha 测试代码的主要内容,如果未能解决你的问题,请参考以下文章
如何检查请求是不是使用 JavaScript (Mocha) 发送
使用 Mocha 进行 JavaScript 代码自动化测试