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

瓦西姆

我正在尝试将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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将Jest与Nuxt组件一起使用时无法读取未定义的属性$ loading

错误:将Angular CLI与ScrollMagic和GSAP一起使用时无法解析'TweenMax'

将fnAddData与数据顺序一起使用时出错

将useState与[]和不与之一起使用,以及与{}一起使用时的区别

尝试将 Jest 与 Typescript 一起使用时 tsconfig.json 文件中的问题

灰烬数据:将store.find与查询参数一起使用时,CreateRecord无法更新模型

将sbt与bintray-sbt插件一起使用时,如何发布快照?

在将多线程与python-opencv一起使用时是否发布了GIL?

将ES6 let与firefox和angular一起使用时,无法实例化模块

无法将python和pymysql一起使用插入数据mysql

如何使用Ajax将文件和表单数据一起发布到MVC控制器?

将QLineSeries与openGL一起使用时,无法正确将QChartView保存为图像

Java:将FileChannel和ByteChannel一起使用时,READ和WRITE是“模糊的”?

将 CreateDataFrame 与 Pandas 数据一起使用时,将 NaN 替换为 null

无法将titlesec与markdown和pandoc一起使用?

NSMenu和NSStatusItem操作将无法一起使用

当我将 avg 与 count 和 sum 一起使用时,组函数的使用无效

在将Pipework与Docker容器一起使用时,为什么我无法进行RTNETLINK操作?

将@Transactional与@Commit一起使用时无法测试预期的异常

ValueError:将索引与seaborn线图一起使用时,无法解释输入“索引”

无法散列的类型:将modin与熊猫一起使用时的系列?

将CI 3与HMVC一起使用时无法加载库

将Ref :: map与特征对象一起使用时无法推断寿命

将QString与wchar_t一起使用时无法解析的外部符号

无法将Typedoc与angularcli一起使用时会忽略某些文件

反应-将Promise与Edge一起使用时无法解析错误

将Xpath与lxml etree一起使用时,列表无法序列化错误

与 TabBarIOS 一起使用时,无法将组件正确传递给 NavigatorIOS

将 PyTorch 与 cuda 11.1 一起使用时,PyTorch 无法正常工作:Dataloader