将Supertest与Mock-fs和Jest一起使用时无法发布数据

问题描述

我正在尝试将 POST 请求发送到我的'/ convert'路线,但是我在该路线中将主体作为空对象。我正在使用 Supertest mock-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并像超级按钮一样工作。

    controls = new THREE.OrbitControls(camera,scene);
,

不确定testdata对象'filename:test

中的最后一个值是否用逗号分隔

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...