首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在Jest中用supertest (用于测试快速应用程序)测试delete

无法在Jest中用supertest (用于测试快速应用程序)测试delete
EN

Stack Overflow用户
提问于 2022-08-23 07:07:06
回答 1查看 39关注 0票数 -1

我正在测试日志在删除的应用帐户功能的应用程序。现在,POSTGET登录方法运行良好,但是当我运行应用程序的delete测试并检查数据库是否为null时,它会返回我登录的帐户详细信息,而不是空的。命令成功地从数据库中删除文档,但当我检查null时,它仍然返回帐户详细信息的一个对象。

现在我试过了

1)超级测试方法DELDELETE之间的切换

2)将数据库从MongoDB地图集更改为本地托管数据库

3)将jest、supertest、MongoDB和猫鼬的最新版本更改为以前的版本

但什么都没起作用。

下面是表示代码、我的测试代码和错误消息

表示代码

user.js

代码语言:javascript
复制
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= router

app.js

代码语言:javascript
复制
const userRouter= require('./routers/user')
app.use(express.json())
app.use(userRouter)
module.exports= app 

测试代码

user.test.js

代码语言:javascript
复制
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()
})

错误

代码语言:javascript
复制
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文件信任

代码语言:javascript
复制
"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

代码语言:javascript
复制
PORT=3000
MONGODB_URL=mongodb://127.0.0.1:27017/task-manager-api-test

我希望我已经明确了我的问题,如果你们需要任何其他信息,请随时留下评论。谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-23 10:37:23

问题是在user.js中,我使用猫鼬方法remove()删除我的文档。我将其更新为deleteOne()方法,并开始给出null。我在这里保留我的怀疑和答案,所以如果任何人面临同样的错误,他们将能够比我更快地解决它。编码愉快!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73454465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档