我正在使用 Jest 来测试我的 Node 应用程序。
我是否可以期望/断言一个值是日期对象?
expect(typeof result).toEqual(typeof Date())
是我的尝试,但自然返回[Object]。所以这也会通过 {}。
适用于较新版本的 Jest
> 16.0.0
:
有一个名为
toBeInstanceOf
的新匹配器。您可以使用匹配器来比较值的实例。
示例:
expect(result).toBeInstanceOf(Date)
适用于 Jest 版本
< 16.0.0
:
使用
instanceof
证明 result
变量是否为 Date
对象。
示例:
expect(result instanceof Date).toBe(true)
另一个匹配常见类型的例子:
boolean
expect(typeof target).toBe("boolean")
number
expect(typeof target).toBe("number")
string
expect(typeof target).toBe("string")
array
expect(Array.isArray(target)).toBe(true)
object
expect(target && typeof target === 'object').toBe(true)
null
expect(target === null).toBe(true)
undefined
expect(target === undefined).toBe(true)
function
expect(typeof target).toBe('function')
Promise
或async function
expect(!!target && typeof target.then === 'function').toBe(true)
匹配更多类型的另一个示例:
float
(十进制数。即3.14
、137.03
等)
expect(Number(target) === target && target % 1 !== 0).toBe(true)
Promise
或 async function
返回 Error
await expect(asyncFunction()).rejects.toThrow(errorMessage)
参考资料:
接受的答案有效,但容易出现拼写错误。特别是对于原始类型
// This won't work. Misspelled 'string'
expect(typeof target).toBe("strng")
我在文档中偶然发现的一个更好的方法(没有明确定义为测试类型的方法)是:
expect(id).toEqual(expect.any(Number))
expect(title).toEqual(expect.any(String))
expect(feature).toEqual(expect.any(Boolean))
expect(date).toEqual(expect.any(Date))
Jest 支持
toBeInstanceOf
。 请参阅他们的文档,但以下是他们在回答此问题时所拥有的内容:
class A {}
expect(new A()).toBeInstanceOf(A);
expect(() => {}).toBeInstanceOf(Function);
expect(new A()).toBeInstanceOf(Function); // throws
检查数据类型的另一种方法是定义一个函数并将包含要检查的属性的对象传递给它。
使用类似的方法,如@Mazen Sharkawy的答案:
const validateDatatypes = ({ objToValidate }) => {
expect(objToValidate).toEqual({
property1: expect.any(String),
property2: expect.any(Number),
property2: expect.any(Date),
// Every other check you need ...
});
};
如果您正在处理 JSX,您可以执行以下操作
expect(result.type).toBe(MyComponent);
示例:
component = shallow(<MyWidget {...prop} />);
instance = component.instance();
const result = instance.myMethod();
expect(result.type).toBe(MyComponent);
在此示例中
myMethod()
返回 MyComponent
,我们正在测试它。