node.js - 如何用 supertest 模拟 multer?

标签 node.js multer supertest

我正在编写文件上传 API,在模拟 multer 时遇到了一些麻烦。我正在尝试使用 supertest 测试我的端点。

it('load image', async () => {
    await app
        .post(`${apiImage}`)
        .set('Authorization', 'abc123')
        .attach('avatar', `${__dirname}/test.jpg`);
        .expect(200);
});

上传按预期工作。但是每次我运行测试时,都会创建新文件。那么,如何模拟 multer 而不是每次都创建新文件?

最佳答案

我有一个中间件助手来像这样包装 multer

// middleware/index.js

const multer = require('multer');
exports.multerUpload = () => multer({...});

然后像这样在我的 route 使用它

// routes.js

const { multerUpload } = require('path/to/middlewares');

app.post('/upload', multerUpload().any());

然后,在我的测试中,我可以停止 multerUpload

// test.js

const middlewares = require('path/to/middlewares');
sinon.stub(middlewares, 'multerUpload').callsFake(
      () => {
        return {
          any() {
            return (req, res, next) => {
              // You can do whatever you like to the request body here e.g
              req.body = { title: req.query.title };
              req.files = [{ location: 'sample.url', key: 'sample.key' }];
              return next();
            };
          },
        };
      },
);

关于node.js - 如何用 supertest 模拟 multer?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47040761/

相关文章:

javascript - 为什么 grunt-contrib-concat 不应用我的流程回调?

node.js - Mongoose 删除不起作用 [findByIdAndRemove]

node.js - 使用 Angular 上传文件到 Multer

node.js - 输入验证失败时如何防止 Multer 文件上传

node.js - 如何使用express和multer将图像从Angular发送到Node JS?

mocha.js - 抑制来自 Supertest 的 REST 日志记录调用

android - 我无法在 android 中构建我的项目

node.js - pm2 可以运行 'npm start' 脚本吗

javascript - 执行请求数组失败,返回 "Error: done() called multiple times"。映射请求数组不会触发请求

http - 为什么 supertest(测试 express )返回的状态是 301 而不是 200?