我正在尝试将POST请求发送到我的‘/转换’路由,但在该路由中我将作为一个空对象获得body。我正在使用超级测试和模拟-fs(以模拟我的文件系统)。如果我从我的测试文件中删除模拟({.})方法,并尝试发送相同的POST请求,那么它是完全正常的。我正在获得‘/req.body’路由中的req.body值,而不是使用({.})方法。我希望模拟-fs在使用Supertest发送POST请求时工作,并且主体应该在‘/转换’路由中可用。
请帮助或建议我做错了什么,因为我已经搜索了很多,但没有得到任何有用的信息,这个场景。
// testing.spec.ts
import request from 'supertest';
import mock from 'mock-fs';
describe('Converts HTML to PDF', () => {
beforeEach(() => {
const mockStorage = {
mode: 0o777,
items: {
'654321': mock.directory({mode: 0o775})
}
}
const mockAppDirectory = {
mode: 0o777,
items: {
'storage': mock.directory(mockStorage)
}
}
mock({
'/app': mock.directory(mockAppDirectory)
})
});
afterEach(function() {
mock.restore();
});
test('test', async (done) => {
const testData = {
header:"test",
footer:"test",
body:"test",
dpi:200,
filename:"test",
};
const res = await request(app)
.post('/convert')
.send(testData)
.expect(200)
done();
});
})
// testRoute.ts
import express from "express";
const router = express.Router();
router.post('/convert', async (req: Request, res: Response) => {
console.log(JSON.stringify(req.body));
);
export default router;
发布于 2020-09-26 06:02:24
这是度过几天后的解决方案。为了从请求中获取主体,我们需要正文解析器,而node_modules目录中存在体解析器。默认情况下,所有文件都是延迟加载在模拟-fs中的,因此模拟-fs只能模拟和加载我们使用模拟函数指定的目录。在我的代码中,我没有显式地加载node_modules目录,因此模拟fs不知道body解析器模块。因此,我尝试显式地加载node_modules,并且工作得很有魅力。
mock({
// @ts-ignore
'node_modules': mock.load(path.resolve('node_modules')),
'/app': mock.directory({ mode: 0o775 })
});
发布于 2020-09-15 19:05:18
不确定在testdata对象的文件名: test中的最后一个值上应有一个逗号
https://stackoverflow.com/questions/63908106
复制相似问题