我应该为功能使用哪种Jest匹配器?

问题描述

假设一个函数返回了另一个函数

function foo() {
  return () => 1;
}

expect(foo())之后我可以使用什么匹配器来确保foo()返回一个函数?另外,有没有办法验证功能签名?

解决方法

typeof有很多怪癖,但我认为在这种情况下使用是明智的。

expect( typeof foo() ).toBe('function')

您可以使用.length

检查一个函数定义了多少个参数。
expect( (a,b,c) => {} ).toHaveLength( 3 )

但是无法在javascript中强制执行参数的类型。所有功能都可以接受任何类型。而且,您始终可以将比“指定”更多的参数传递给函数。而且该函数可能使用arguments来读取所有这些参数,因此即使.length在您的用例中也可能用途有限。