我有一个这样定义的类:
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();
});
答案 0 :(得分:1)
Babel将获取您的Flow代码并删除所有类型注释。
因此,流程可以帮助您在构建之前找到错误的调用(通常在开发时,实际上是这样)。并且在项目中运行flow
后,您就可以发现签名不匹配的地方。
之后,编译流注释被删除,并且您使用的是纯JavaScript。
因此,如果您的构造函数接受any
arg,但是只有数组是有效的数组,则可以明确声明:
class MyClass {
constructor(data:*) {
if (!Array.isArray(data)) {
throw new Exception('Bad argument');
}
}
}
如果您还指定了data:Array<any>
,则上述代码库也将起作用,但是在编译时会看到错误(因此您可以追究应归咎于谁:))。