首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >无法在使用模拟-fs和Jest使用Supertest时发布数据

无法在使用模拟-fs和Jest使用Supertest时发布数据
EN

Stack Overflow用户
提问于 2020-09-15 18:47:27
回答 2查看 438关注 0票数 0

我正在尝试将POST请求发送到我的‘/转换’路由,但在该路由中我将作为一个空对象获得body。我正在使用超级测试模拟-fs(以模拟我的文件系统)。如果我从我的测试文件中删除模拟({.})方法,并尝试发送相同的POST请求,那么它是完全正常的。我正在获得‘/req.body’路由中的req.body值,而不是使用({.})方法。我希望模拟-fs在使用Supertest发送POST请求时工作,并且主体应该在‘/转换’路由中可用。

请帮助或建议我做错了什么,因为我已经搜索了很多,但没有得到任何有用的信息,这个场景。

// testing.spec.ts

代码语言:javascript
运行
复制
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

代码语言:javascript
运行
复制
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;
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-26 06:02:24

这是度过几天后的解决方案。为了从请求中获取主体,我们需要正文解析器,而node_modules目录中存在体解析器。默认情况下,所有文件都是延迟加载在模拟-fs中的,因此模拟-fs只能模拟和加载我们使用模拟函数指定的目录。在我的代码中,我没有显式地加载node_modules目录,因此模拟fs不知道body解析器模块。因此,我尝试显式地加载node_modules,并且工作得很有魅力。

代码语言:javascript
运行
复制
mock({
     // @ts-ignore
     'node_modules': mock.load(path.resolve('node_modules')),
     '/app': mock.directory({ mode: 0o775 })
});
票数 0
EN

Stack Overflow用户

发布于 2020-09-15 19:05:18

不确定在testdata对象的文件名: test中的最后一个值上应有一个逗号

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63908106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档