Обновление
Jest Issue Report
Я несколько сузил это.Значение oes
каким-то образом переключается с Object на логическое значение 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);
}
Таким образом, похоже, что функция не определена при первой попытке выполнения оператора журнала, а затем внезапно определяет себя.
Это класс, из которого экземпляр 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();
Тест пройден ...