gpt4 book ai didi

node.js - 使用 promise 解析/拒绝对 Mongoose 验证进行单元测试

转载 作者:太空宇宙 更新时间:2023-11-04 03:24:14 24 4
gpt4 key购买 nike

我正在努力寻找一种方法来对 Mongoose 中的字段验证进行单元测试。我目前有以下测试:

it('should be invalid if googleId is empty', () => 
testBook.googleId = '';
const newBook = new Book(testBook);
return newBook.validate().catch((err) => {
should.exist(err.errors.googleId);
});
});

此测试未按预期工作,因为如果我对 googleId 进行了正确的验证,测试就会通过,因为它将断言 err.errors.googleId 存在,但如果我没有对 googleId 进行任何验证,它也会通过,因为 .catch() 永远不会被调用,并且它假定测试正在通过。

我尝试将 should.fail() 放入 .then() 中,但这样它总是以 .catch() 结束,但会出现不同的错误,如果没有验证,则会捕获 should.fail() 错误,如果有验证,则会捕获模型验证错误。

实现此类测试的最佳方法是什么?

非常感谢!

编辑:我尝试过使用 newBook.validate() 的回调并且它有效,但我从不使用模型方法的回调,我总是倾向于使用 Promise,所以我应该在这种特殊情况下使用回调还是还有更好的方法使用 Promise 来处理它?<​​/p>

最佳答案

您可以使用第二个参数然后放置一些会在第一个参数中抛出的内容,例如:

return newBook.validate().then(
resp => throw new Error("Test failed this should not resolve"),
err => should.exist(err.errors.googleId);
});

所以现在如果 newBook.validate() 没有被拒绝,测试就会失败。由于您没有使用catch(),因此您无法阻止它导致测试失败。如果 promise 被拒绝,那么您的测试应该通过(假设它满足设定的条件)。这是有效的,因为与 catch() 不同,then() 的错误回调不会捕获 then() 中抛出的错误。当然,您可以在第一个回调中放置任何会引发错误的内容,例如 assert.fail() 或您的库中的任何内容。

关于node.js - 使用 promise 解析/拒绝对 Mongoose 验证进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46720132/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com