【发布时间】:2020-08-03 03:43:41
【问题描述】:
我正在创建一个 API 来存储用户,允许用户根据用户名和密码登录、阅读他们的个人资料等。
路线均已成功构建,但在使用“Supertest”库测试 api 期间,我发现了一些问题。
我尝试按如下方式创建用户实例 userOne(在调用 beforeEach 方法之前):
//Creating a mock user for testing
const userOneId = new mongoose.Types.ObjectId()
const userOne = new User({
_id: userOneId,
name: 'Temp-user',
email: 'tempuser@gmail.com',
password: 'tempuser',
age:40,
tokens: [{
token: jwt.sign({_id:userOneId},process.env.JWT_SECRET)
}]
})
beforeEach(async ()=>{
try{
await User.deleteMany()
await userOne.save()
}catch(e){
console.log('BeforeEach error: ',e)
}
这使我的测试失败,beforeEach 抛出以下错误:
BeforeEach error: DocumentNotFoundError: No document found for query "{ _id: 5f2570846592c22d641e3247 }" on model "User"
at /home/priyank_linux/Desktop/node-course/task-manager/node_modules/mongoose/lib/model.js:323:38
at processTicksAndRejections (internal/process/task_queues.js:97:5) {
result: undefined,
numAffected: undefined,
filter: { _id: 5f2570846592c22d641e3247 },
query: { _id: 5f2570846592c22d641e3247 }
}
> 但是,当我尝试在每次测试之前保存用户的以下方法时,我的所有测试都通过了
//Creating a mock user for testing
const userOneId = new mongoose.Types.ObjectId()
const userOne = {
_id: userOneId,
name: 'Temp-user',
email: 'tempuser@gmail.com',
password: 'tempuser',
age:40,
tokens: [{
token: jwt.sign({_id:userOneId},process.env.JWT_SECRET)
}]
}
beforeEach(async ()=>{
try{
await User.deleteMany()
//creating and saving the user instance at the same time
await new User(userOne).save()
}catch(e){
console.log('BeforeEach error: ',e)
}
})
//All tests passed successfully !
我的问题是,为什么当我创建并保存一个 同时用户模型,我没有找到找不到文档 错误(这意味着保存的文档实际上正在获取 存储在数据库中)。我哪里错了?
【问题讨论】:
标签: node.js mongoose supertest