问题描述
假设一个函数返回了另一个函数。
function foo() {
return () => 1;
}
在expect(foo())
之后我可以使用什么匹配器来确保foo()
返回一个函数?另外,有没有办法验证功能签名?
解决方法
typeof有很多怪癖,但我认为在这种情况下使用是明智的。
expect( typeof foo() ).toBe('function')
您可以使用.length
expect( (a,b,c) => {} ).toHaveLength( 3 )
但是无法在javascript中强制执行参数的类型。所有功能都可以接受任何类型。而且,您始终可以将比“指定”更多的参数传递给函数。而且该函数可能使用arguments
来读取所有这些参数,因此即使.length
在您的用例中也可能用途有限。