在开玩笑中针对抛出的错误对象进行断言

新手上路,请多包涵

我有一个抛出对象的函数,我如何断言开玩笑地抛出正确的对象?

 it('should throw', () => {

  const errorObj = {
    myError: {
      name: 'myError',
      desc: 'myDescription'
    }
  };

  const fn = () => {
    throw errorObj;
  }

  expect(() => fn()).toThrowError(errorObj);
});

https://repl.it/repls/FrayedViolentBoa

原文由 Daniel Billingham 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 286
2 个回答

如果您正在寻找测试自定义错误的内容(我认为这就是您想要做的)。您可以捕获错误然后执行断言。

 it('should throw', () => {
 let thrownError;

 try {
   fn();
 }
 catch(error) {
  thrownError = error;
 }

 expect(thrownError).toEqual(expectedErrorObj);
});

正如 Dez 所建议的,如果您不抛出 javascript Error 对象的实例,则 toThrowError 函数将不起作用。但是,您可以通过装饰错误对象的实例来创建自定义错误。

例如

let myError = new Error('some message');
myError.data = { name: 'myError',
                 desc: 'myDescription' };
throw myError;

然后,一旦您在测试中发现错误,您就可以测试错误的自定义内容。

 expect(thrownError.data).toEqual({ name: 'myError',
                                   desc: 'myDescription' });

原文由 Duncan Alexander 发布,翻译遵循 CC BY-SA 3.0 许可协议

您需要抛出一个 Javascript Error 对象,因此 Jest toThrowError 方法标识已抛出错误。此外, toThrowError 看起来与抛出的错误消息匹配,或者如果您只是通过 .toThrowError() 检查是否抛出了错误。

 it('should throw', () => {

  const errorObj = {
    myError: {
      name: 'myError',
      desc: 'myDescription'
    }
  };

  const fn = () => {
    throw new Error(errorObj.myError.desc);
  }

  expect(() => fn()).toThrowError("myDescription");
});

如果你想检查整个对象是否按原样传递,你需要像这样检查它:

 it('should throw', () => {

  const errorObj = {
    myError: {
      name: 'myError',
      desc: 'myDescription'
    }
  };

  const fn = () => {
    throw errorObj;
  }

  expect(() => fn()).toThrowError(new Error(errorObj));
});

原文由 Dez 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题