我正在尝试将POST请求发送到我的'/ convert'路线,但是我在该路线中将主体作为空对象。我正在使用Supertest和模拟-fs(模拟我的文件系统)。如果我从测试文件中删除了嘲笑({...})方法,并尝试发送相同的POST请求,那么它运行得很好。我在不使用模拟({...})方法的情况下,在'/ convert'路由中获取了req.body值。我想让模拟fs在使用Supertest发送POST请求时工作,并且主体应该在“ / convert”路由中可用。
请帮助或建议我做错了什么,因为我已经进行了很多搜索,但无法获得有关此场景的任何有用信息。
// 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;
这是花了几天的解决方案。为了从请求中获取主体,我们需要有主体解析器,并且主体解析器位于node_modules目录中。默认情况下,所有文件都被延迟加载到模拟Fs中,因此模拟fs仅模拟并加载我们使用模拟功能指定的目录。在我的代码中,我没有显式加载node_modules目录,因此,mock-fs无法识别body-parser模块。因此,我尝试显式加载node_modules,并像一个超级按钮一样工作。
mock({
// @ts-ignore
'node_modules': mock.load(path.resolve('node_modules')),
'/app': mock.directory({ mode: 0o775 })
});
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句