我正在测试日志在和删除的应用帐户功能的应用程序。现在,POST和GET登录方法运行良好,但是当我运行应用程序的delete测试并检查数据库是否为null时,它会返回我登录的帐户详细信息,而不是空的。命令成功地从数据库中删除文档,但当我检查null时,它仍然返回帐户详细信息的一个对象。
现在我试过了
1)超级测试方法DEL和DELETE之间的切换
2)将数据库从MongoDB地图集更改为本地托管数据库
3)将jest、supertest、MongoDB和猫鼬的最新版本更改为以前的版本
但什么都没起作用。
下面是表示代码、我的测试代码和错误消息
表示代码
user.js
const express = require('express')
const User = require('../models/user')
const auth=require('../middleware/auth')
const router= new express.Router()
router.delete('/users/me',auth, async(req, res)=>{
try{
req.user.remove()
res.send(req.user)
}catch(e){
res.status(500).send()
}
})
module.exports= routerapp.js
const userRouter= require('./routers/user')
app.use(express.json())
app.use(userRouter)
module.exports= app 测试代码
user.test.js
const request = require('supertest')
const mongoose = require('mongoose')
const jwt = require('jsonwebtoken')
const app = require('../src/app')
const User = require('../src/models/user')
const userOneId = new mongoose.Types.ObjectId()
const userOne = {
_id: userOneId,
name: 'Mike',
email: 'mike@example.com',
password: '56what!!',
tokens: [{
token: jwt.sign({ _id: userOneId }, process.env.JWT_SECRET)
}]
}
beforeEach(async()=>{
await User.deleteMany()
await new User(userOne).save()
})
test('Should login existing user', async () => {
const response = await request(app).post('/users/login').send({
email: userOne.email,
password: userOne.password
}).expect(200)
const user = await User.findById(userOneId)
expect(response.body.token).toBe(user.tokens[1].token)
})
test('Should not login nonexistent user', async () => {
await request(app).post('/users/login').send({
email: userOne.email,
password: 'thisisnotmypass'
}).expect(400)
})
test('Should not delete account for unauthenticate user', async () => {
await request(app)
.del('/users/me')
.send()
.expect(401)
})
test('Should delete account for user', async () => {
await request(app)
.del('/users/me')
.set('Authorization', `Bearer ${userOne.tokens[0].token}`)
.send()
.expect(200)
//the lines of code below are not working
const user = await User.findById(userOneId)
expect(user).toBeNull()
})错误
Tests: 1 failed, 8 passed, 9 total
● Should delete account for user
expect(received).toBeNull()
Received: {"__v": 0, "_id": "630477018ef98753a4efebbe", "age": 0, "createdAt": 2022-08-23T06:43:14.383Z, "email": "mike@example.com", "id": "630477018ef98753a4efebbe", "name": "Mike", "updatedAt": 2022-08-23T06:43:14.383Z}
89 | //the lines of code below are not working
90 | const user = await User.findById(userOneId)
> 91 | expect(user).toBeNull()
| ^
92 | })
93 |
94 |
at Object.toBeNull (tests/user.test.js:91:18)package.json文件信任
"scripts": {
"start": "node src/index.js",
"dev": "env-cmd ./config/dev.env nodemon src/index.js",
"test": "env-cmd ./config/test.env jest --watch"
},
"jest": {
"testEnvironment": "node"
},test.env
PORT=3000
MONGODB_URL=mongodb://127.0.0.1:27017/task-manager-api-test我希望我已经明确了我的问题,如果你们需要任何其他信息,请随时留下评论。谢谢。
发布于 2022-08-23 10:37:23
问题是在user.js中,我使用猫鼬方法remove()删除我的文档。我将其更新为deleteOne()方法,并开始给出null。我在这里保留我的怀疑和答案,所以如果任何人面临同样的错误,他们将能够比我更快地解决它。编码愉快!!
https://stackoverflow.com/questions/73454465
复制相似问题