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

Mar*_*tus 14 javascript mocha.js flowtype

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

下面是一个最小的repro:

/* @flow */

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

当我运行这个流,人流确实与分配临场问题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
Run Code Online (Sandbox Code Playgroud)

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

我不确定这些问题是否与摩卡有关,但我不认为我可以自信地用更广泛的术语来构建问题,所以我的问题是:

  1. 我怎样才能有流式检查摩卡测试代码而不抑制包含的每一行describeit
  2. 这是一个更广泛的情况的实例,如果是这样,后者会是什么?

Gab*_*lla 4

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

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

安装它

npm install -g flow-typed
Run Code Online (Sandbox Code Playgroud)

然后运行

flow-typed install 
Run Code Online (Sandbox Code Playgroud)

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

  • @Andy你应该将导入更改为: import {describe, it} from 'mocha'; (2认同)