使用flowtype静态检查mocha测试代码

时间:2016-11-17 22:57:38

标签: javascript mocha flowtype

我有一些复杂的Mocha代码,我想用FlowType静态检查,因为为什么不呢?

以下是最小的复制品:

> $null = Get-ChildItem / -OutVariable ov; $($ov).GetType().FullName
System.Object[] # multi-element System.Collections.ArrayList converted to array

当我对此运行Flow时,Flow确实发现了/* @flow */ describe('it', function () { it('fails', function() { const s: number = 'flow spots this error'; }); }); string的分配问题,这表明该方法在某种程度上有效。

但是,我也得到了:

number

......显然Mocha测试定义是在这些功能全局可用的环境中运行的,但是查看测试文件并没有什么能让Flow检测到它。

我不确定这些问题是否特定于摩卡,但我不觉得我可以自信地用更广泛的术语来构建问题,所以我的问题是:

  1. 如何在不抑制包含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 describe的每一行的情况下检查流式检查Mocha测试代码?
  2. 这是一个更广泛的情境的实例,如果是这样,后者会是什么?

2 个答案:

答案 0 :(得分:4)

第三方库通常需要定义文件,即包含给定库的所有类型信息的文件。

在这种情况下,你需要一个mocha的定义文件,幸运的是由flow-typed.提供

安装
npm install -g flow-typed

然后运行

flow-typed install 

它将自动安装依赖项的所有可用定义文件,包括mocha。

答案 1 :(得分:1)

您只需声明流describeit变量。

/* @flow */
declare var describe: any;
declare var it: any;

describe('it', function () {
    it('fails', function() {
        const s: number = 'flow spots this error';
    });
});