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

时间:2018-11-08 10:41:38

标签: javascript jestjs flowtype

我有一个这样定义的类:

var result = (from a in db.Prices
              join b in db.ExchangeRatse on a.TRADE_DATE equals b.TRADE_DATE

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

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

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

有人能帮助解释我如何说服Jest在类型不正确的地方通过Flow和error运行代码吗?

编辑: 我也已经运行test('bad args', () => { expect(new MyClass()).toThrow(); expect(new MyClass({})).toThrow(); expect(new MyClass('string')).toThrow(); });

1 个答案:

答案 0 :(得分:1)

doc states that

  

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

因此,流程可以帮助您构建之前找到错误的调用(通常在开发时,实际上是这样)。并且在项目中运行flow后,您就可以发现签名不匹配的地方。

之后,编译流注释被删除,并且您使用的是纯JavaScript。

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

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

如果您还指定了data:Array<any>,则上述代码库也将起作用,但是在编译时会看到错误(因此您可以追究应归咎于谁:))。