Я создаю API, который хранит пользователей, позволяет пользователям входить в систему, читать их профиль и т. Д. c на основе имени пользователя и пароля.
Все маршруты успешно построены, но во время тестирования API с использованием библиотеки Supertest, я обнаружил некоторую проблему.
Я попытался создать пользовательский экземпляр 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 !
У меня вопрос, почему, когда я одновременно создаю и сохраняю экземпляр модели User, я не получаю ошибку Document not found (что означает, что сохраненный документ фактически сохраняется в базе данных). Где я ошибаюсь?