当前位置: 首页 > 知识库问答 >
问题:

使用Jest测试类型化异常

牟正真
2023-03-14

试图利用本SO帖子中概述的方法。

我有以下类型的例外:

    /**
     * @param message The error message
     * @param value The value that violates the constraint
     * @param field The name of the field
     * @param type The expected type for the field
     * @param code The application or module code for the error
     */
    export class IsError extends Error {
      constructor(
        public message:string,
        public value: any, 
        public field:string, 
        public type: string,
        public code?:string) {
          super(message);
          this.name = 'IsError';
      }
    }

这个函数抛出它:

 export function isBooleanError(value: any, field:string, code?: string): void {
      if (!isBoolean(value)) {
        const message:string = `The field ${field} should be a boolean valued.  It is set to ${value}. `;
        throw new IsError(message, value, field, BOOLEAN_TYPE, code);
      }
    }

这项工作:

expect(()=>{isBooleanError({}, '')}).toThrow(Error);

但这并不:

expect(()=>{isBooleanError({}, '')}).toThrow(IsError);

有人知道为什么后者不起作用吗?笑话日志:

expect(received).toThrow(expected)

Expected name: "IsError"
Received name: "Error"

共有1个答案

尉迟阳煦
2023-03-14

我必须将其添加到异常的构造函数中:

  super(message);
  Object.setPrototypeOf(this, IsError.prototype);      
 类似资料:
  • 我正在处理一些代码,需要测试函数抛出的异常类型(是TypeError、ReferenceError等吗?)。 我当前的测试框架是AVA,我可以将其作为第二个参数方法进行测试,如下所示: 我开始用笑话重写我的测试,但找不到如何轻松做到这一点。这有可能吗?

  • 问题内容: 我正在用React Native构建一个应用程序。我想尽量减少与数据库通信的频率,因此我大量使用了AsyncStorage。虽然在DB和AsyncStorage之间的转换中存在很多错误的余地。因此,我想通过对它运行自动化测试来确保AsyncStorage拥有我相信的数据。令人惊讶的是,我还没有找到有关如何在线进行操作的任何信息。我自己尝试做的尝试还没有完成。 使用笑话: 此方法失败,并

  • 问题内容: 任何人都可以告诉我如何在安装调用组件时开玩笑地等待一个模拟的诺言解决吗? 将在我的笑话嘲笑测试 然后是我的测试文件: 问题是我正在返回,因为尚未进行模拟的api调用和生命周期方法。 问题答案: Jest有模拟假冒时间旅行的方法,要在您的情况下使用它,我想您可以按照以下样式更改代码: 另外,您也可以使用

  • 假设我有以下功能: 根据Jest文档,我应该能够使用以下代码测试函数是否引发异常: 但是,我得到了以下错误。 有人能告诉我我做错了什么吗? 谢谢!

  • 问题内容: 我有一个取决于环境变量的应用程序,例如: 我想测试例如: 可以通过节点env变量设置APP_PORT。 或某个应用程序正在使用以下命令设置的端口上运行 我如何用Jest做到这一点?我可以在每次测试之前设置这些变量,还是应该以某种方式模拟它? 问题答案: 在每次测试之前重设resetModules,然后在测试内部动态导入模块很重要: 如果您在运行Jest之前寻找一种加载env值的方法,请