我想用玩笑测试我的路线,但我不知道如何在测试中模拟或模拟会话以通过第一个 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('/')
}
})
有人可以帮助我吗?
以防万一,请检查 supertest-session 包,它是 supertest 的包装器,并在请求中提供会话身份验证:
找不到任何方法可以用
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...
});
});