【问题标题】:using flowtype to statically check mocha test code使用 flowtype 静态检查 mocha 测试代码
【发布时间】: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 特有的,但我觉得我不能自信地从更广泛的角度来阐述这个问题,所以我的问题是:

  1. 如何在不抑制包含describeit 的每一行的情况下让 Flow 类型检查 Mocha 测试代码?
  2. 这是更广泛的情况的一个实例吗?如果是,后者会是什么?

【问题讨论】:

    标签: javascript mocha.js flowtype


    【解决方案1】:

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

    此时需要mocha的定义文件,幸好flow-typed.提供

    安装它

    npm install -g flow-typed
    

    然后运行

    flow-typed install 
    

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

    【讨论】:

    • mocha 的流式defs 目前是一个几乎没用的自动生成存根,它们不能修复describeit 上的错误。
    • @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】:

    您可以简单地声明流describeit 变量。

    /* @flow */
    declare var describe: any;
    declare var it: any;
    
    describe('it', function () {
        it('fails', function() {
            const s: number = 'flow spots this error';
        });
    });
    

    【讨论】:

    • 我认为这个解决方案没有帮助。我认为它会成功消除流类型错误,但由于使用了any,它不会对相关函数添加任何有意义的类型限制。
    • 是的..你也可以删除流类型然后,有什么意义:D
    猜你喜欢
    • 1970-01-01
    • 2013-04-24
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多