我试图添加一个单元测试来验证Yup.isValid
函数,但在运行测试用例后显示错误为:Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL
。即使我改变了jasmine的最小超时,也显示相同的错误。我验证Yup架构的函数是:
export const validateSchema= (
validationSchema,
data
) => {
return new Promise(async (resolve, reject) => {
await validationSchema
isValid(data)
.then(isFormValid => {
//passing response to method
})
.catch(error => reject(error));
});
};
字符串
我的测试用例是:
test("validate Schema",async () => {
let catchFn = jest.fn();
let data= someSampleData;
//data is valid as per the schema
await validationSchema(
validationSchema,
data
)
.then(res => {
//My expected condition
})
.catch(catchFn);
});
型
上面的测试用例不去然后我可以把我的条件。同样的错误来了,我提到。我如何解决这个问题?
4条答案
按热度按时间cigdeys31#
对于大型模式,最好使用yup的validateAt API来传递要验证的路径,这样fixture数据可以更简洁。
Jest规范可能看起来像这样:
个字符
单元测试是很有趣的,因为它有很多是配置,测试库的工作方式可能是无关紧要的。然而,这似乎有助于测试更复杂的自定义模式验证行为。
3yhwsihp2#
validateSchema
使用了promise构造反模式,并展示了将其视为反模式的原因之一,new Promise
是不必要的构造,容易出现人为错误。使用
async
作为Promise
执行器是一个错误,它会导致反模式。Promise
执行器会忽略从async
函数返回的promise。resolve
永远不会被调用,而.catch(error => reject(error))
是无操作的。validateSchema
返回rejected或pending promise。如果从测试返回pending promise,这会导致超时。它应该是:
字符串
很少需要混合
await
和原始promise。在测试中使用catch
中的dummy函数将导致抑制错误,这很少是一种可取的行为。测试可以是:
型
r1zhe5dt3#
只是另一个例子,我主要是检查真实值
字符串
nbysray54#
我们使用
schema.validate()
方法和promiseAssert:字符串
这会提供详细的反馈,说明哪些规则显式失败:
的数据
这有助于理解为什么模式会很快失败。