首页 > 解决方案 > TypeError: oes.addValidationError 不是函数

问题描述

更新

笑话问题报告

我缩小了这个范围。的值以oes某种方式从对象切换到true函数中间的布尔值,并且开关被记录两次。这真的很奇怪。validateProperty这是我在第 64 行插入函数的内容:

const propertyValue = o[propertyName];

console.log("OES LINE 64: ", oes);

console.log src/utilities/utilities.ts:64
OES LINE 64:  ObjectErrors { valid: true, errors: [], cache: {} }

console.log src/utilities/utilities.ts:64
OES LINE 64:  true

看起来好像运行时能够以某种方式在oes函数调用运行时切换值......我猜这是某种 Jest 错误,但它真的不应该发生,因为只有一个测试正在运行.

我用我的日志语句提交了整个存储库,以防有人想查看我上面描述的内容

原始问题

使用 Jest 运行此测试,对于以下代码,运行时正在记录TypeError: oes.addValidationError is not a function

  90 |         );
  91 |         console.log("THIS IS THE FUNCTION: ", oes.addValidationError);
> 92 |         oes.addValidationError(ve);
     |             ^
  93 |         oes.valid = false;
  94 |       }
  95 |     }

可以看出我正在记录什么oes.addValidationError。日志输出如下所示:

console.log src/utilities/utilities.ts:91
THIS IS THE FUNCTION:  undefined

console.log src/utilities/utilities.ts:91
THIS IS THE FUNCTION:  function (ve) {
        var key = utilities_1.getObjectPropertyKey(ve.vc.target.name, ve.vc.propertyName);
        this.errors.push(ve);
        this.pushtIfAbsent(key, ve);
    }

所以看起来函数在第一次尝试 log 语句时是未定义的,然后突然间它定义了自己。

这是oes实例是构造函数的类。. 可以看出,实例确实定义了方法。

这是导致奇怪行为的测试

要查看此操作:

  git clone https://github.com/fireflysemantics/validator

然后运行:

`npm t src/decorators/IfValid.spec.ts`

如果我注释掉大部分测试并运行它:

let oes = new ObjectErrors();
expect(typeof oes.addValidationError === "function").toBeTruthy();

测试通过...

标签: javascriptnode.jstypescriptjestjs

解决方案


它已被修复。对我来说,即使有编译错误,测试也在运行,所以我认为这是ts-jest. 在那里打开了另一个问题


推荐阅读