使用快速会话进行玩笑超级测试

问题描述 投票:0回答:2

我想用玩笑测试我的路线,但我不知道如何在测试中模拟或模拟会话以通过第一个 if 第 2 行

app.get('/getMailSuiviList', (req, res) => {
    if (req.session.infoUser != undefined) {
        let mail = require('../models/M_Email')
        mail.indexSuiviByDept(req.session.infoUser.deptID)
            .then(dataMails => {
                res.json(dataMails)
            })
            .catch(e => {
                res.json('Erreur: ' + e)
            })
    } else {
        req.session.error = 'Vous devez vous connecter'
        res.redirect('/')
    }
})

有人可以帮助我吗?

node.js express session jestjs supertest
2个回答
0
投票

以防万一,请检查 supertest-session 包,它是 supertest 的包装器,并在请求中提供会话身份验证:

超级测试会话


0
投票

找不到任何方法可以用

jest
supertest
来做到这一点,所以我直接在
Express
中完成了:

首先,我的路由/控制器位于它们自己的文件中,并且我

app.use()
它们位于我的
server.js
文件中。因此,我不是导入我的服务器并测试它,而是单独导入我的路由并单独测试它们。这允许我注入一个假会话中间件以进行测试。

例如,您将上面的路线放在自己的文件中:

// mail.js

const express = require('express');

const router = express.Router();

router.get('/getMailSuiviList', (req, res) => {
    if (req.session.infoUser != undefined) {
        let mail = require('../models/M_Email')
        mail.indexSuiviByDept(req.session.infoUser.deptID)
            .then(dataMails => {
                res.json(dataMails)
            })
            .catch(e => {
                res.json('Erreur: ' + e)
            })
    } else {
        req.session.error = 'Vous devez vous connecter'
        res.redirect('/')
    }
})

module.exports = router;

现在在我的测试中我这样做:

const mailRouter = require('../mail.js');
const express = require('express');
const supertest = require('supertest');

const app = express();

const fakeSessionMiddleware = (req, res, next) => {
    req.session = {
        infoUser: {
            deptID: 1
        }
    }
    next();
}

app.use(fakeSessionMiddleware);
app.use(mailRouter);


describe('mail',() => {
    it('should get mail', async () => {
        // write your test here...
    });
});
© www.soinside.com 2019 - 2024. All rights reserved.