validateSchema
использует обещанную конструкцию antipattern и показывает одну из причин, по которой он считается антипаттерном, new Promise
- ненужная конструкция, подверженная человеческим ошибкам.
Использование async
в качестве Promise
исполнителя является ошибкой, вносящей вклад в антипаттерн. Promise
executor игнорирует обещание, возвращаемое функцией async
. resolve
никогда не вызывается, а .catch(error => reject(error))
не работает. validateSchema
возвращает либо отклоненное, либо ожидающее обещание. Если ожидаемое обещание возвращается из теста, это приводит к тайм-ауту.
Это должно быть:
export const validateSchema= async (
validationSchema,
data
) => {
await validationSchema;
const isFormValid = isValid(data);
await updateFormValidFlag(isFormValid, theFormName); // does it return a promise?
});
};
Смешивание await
и необработанных обещаний редко когда-либо требуется. Использование фиктивной функции в catch
в тесте приведет к ошибкам подавления, что редко является желательным поведением.
Тест может быть:
test("validate Schema",async () => {
let data= someSampleData;
await validateSchema(...);
//My expected condition
});