javascript - 如何使用 Flow 类型提示和 Jest 处理错误

标签 javascript jestjs flowtype

我有一个这样定义的类:

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

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

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

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

任何人都可以帮助解释我如何说服 Jest 通过 Flow 和类型不正确的错误来运行代码吗?

编辑: 我还运行了 flow-typed install jest@23.6.0//correct jest version

最佳答案

doc states that :

Babel will take your Flow code and strip out any type annotations.

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

编译流程注解被删除后,您拥有了纯 javascript。

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

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

如果您指定 data:Array<any>,上述代码库将起作用同样,但是您会在编译时看到错误(因此您可以找出应该责备的人 :))。

关于javascript - 如何使用 Flow 类型提示和 Jest 处理错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53206034/

相关文章:

javascript - Jest 测试 promise 解析和事件循环 tick

javascript - TypeError : sentimentCurrent. map 不是一个函数?

javascript - 具有部分定义的对象类型 flowjs

node.js - 尝试启动 Atom/Nuclide 时未找到流

javascript - FlowJS : How to use union types and boolean literals

javascript - 包含集合的模型的 Backbone.js View ?

javascript - ReactJS:一个数字输入可以以多个 '0' 结束

javascript - 从另一个 Observable 数组中过滤 Observable 数组元素

javascript - Ionic3:Base64 To Gallery 插件使应用程序崩溃

node.js - 如何关闭来自 winston 的日志对于Jest