我有一个抛出一个对象的函数,我怎么能Assert在jest中抛出的是正确的对象呢?
it('should throw', () => {
const errorObj = {
myError: {
name: 'myError',
desc: 'myDescription'
}
};
const fn = () => {
throw errorObj;
}
expect(() => fn()).toThrowError(errorObj);
});
7条答案
按热度按时间ui7jx7zq1#
如果您正在寻找测试自定义错误的内容(我认为这是您正在尝试做的)。您可以捕获错误,然后执行Assert。
正如Dez所建议的,如果你不抛出javascript Error对象的示例,toThrowError函数将无法工作。但是,您可以通过修饰错误对象的示例来创建自定义错误。
例如
然后,一旦您在测试中捕获了错误,您就可以测试错误的自定义内容。
svmlkihl2#
您需要抛出一个Javascript
Error
对象,因此JesttoThrowError
方法识别出抛出了一个错误。此外,toThrowError
看起来与抛出的错误消息相匹配,或者如果您只检查.toThrowError()
,则会抛出错误。如果你想检查整个对象是否按原样传递,你需要像这样检查:
lmvvr0a83#
这是玩笑中的已知问题,请参见https://github.com/facebook/jest/issues/8140
同时,这里是我的解决方法-https://github.com/DanielHreben/jest-matcher-specific-error
zour9fqk4#
如果目标是检查错误的部分内容,我们可以使用Jest expect.objectContaining来帮助我们保持代码简单,并检查作为错误返回的对象有效负载:
也可用于嵌套对象:
avwztpqn5#
您可以添加自定义匹配器。
1.自定义匹配器
2.添加到setupFilesAfterEnv
在
jest.config
中,将上面的文件添加到setupFilesAfterEnv
列表中,例如:3.调用
xlpyo6sf6#
当我需要测试一个自定义错误(Error的子类)时,我使用以下方法:
2nc8po8w7#
我想提出一个在Jest中使用
rejects
对象的解决方案。假设fn
是一个syncronous函数,你可以像这样编写测试:使用这些解决方案,可以使fn()执行异步。这允许我们使用
rejects
对象,该对象将包含抛出异常的对象。这样你就可以使用toMatchObject()
来检查抛出的物体的形状。