【问题标题】:How to handle errors using Flow type hinting and Jest如何使用流类型提示和 Jest 处理错误
【发布时间】:2019-04-11 20:39:41
【问题描述】:

我有一个这样定义的类:

class MyClass{
  constructor(data:Array<any>){
    ...
  }
} 

Jest 中的基本测试设置如下:

test('bad args', () => {
  expect(new MyClass()).toThrow();
  expect(new MyClass({})).toThrow();
  expect(new MyClass('string')).toThrow();
});

我希望这些会出错,因为类型提示不允许空的构造函数 args 并希望第一个 arg 是数组而不是对象或字符串。

谁能帮助解释我如何说服 Jest 通过 Flow 运行代码并在类型不正确时出错?

编辑: 我也跑了flow-typed install jest@23.6.0 //correct jest version

【问题讨论】:

    标签: javascript jestjs flowtype


    【解决方案1】:

    doc states that:

    Babel 将获取您的 Flow 代码并删除任何类型注释。

    因此,flow 可以帮助您构建之前找到错误的调用(通常在开发时,在 ide 中)。一旦你在你的项目中运行flow - 你就可以发现签名不匹配的地方。

    编译流程注释被删除后,你就有了纯javascript。

    因此,如果您的构造函数接受any arg,但只有数组是有效的,您可以明确声明:

    class MyClass {
      constructor(data:*) {
        if (!Array.isArray(data)) {
           throw new Exception('Bad argument');
        }
      }
    }
    

    如果你也指定data:Array&lt;any&gt;,上面的代码库也可以工作,但是你会在编译时看到错误(这样你就可以找出责任人:))。

    【讨论】:

    • 谢谢,这很有道理 - 没有好好考虑过
    猜你喜欢
    • 2014-07-23
    • 2017-12-14
    • 2019-01-23
    • 2019-11-28
    • 1970-01-01
    • 1970-01-01
    • 2021-04-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多