Я пытаюсь написать тестовые коды для multer и моего сервиса.
Поскольку multer является промежуточным программным обеспечением express, multer предназначен для обработки запроса от клиента и автоматической обработки файла и размещения это в req.file
.
Но мне интересно, есть ли какой-либо способ без реального HTTP-запроса передать двоичный файл или поток в промежуточное программное обеспечение multer, чтобы я мог проверить, правильно ли сохранен файл на локальном диске или размер файла затем помещается в req.file
.
Мой код как промежуточный модуль multer приведен ниже, только для справки:
import { Request, Response, NextFunction } from 'express';
import multer from 'multer';
const multerMiddleware = (dest: string) => (req: Request, res: Response, next: NextFunction) => {
const upload = multer({
storage: multer.diskStorage({
destination: dest,
filename: (req, file, cb) => {
const { videoId } = req.body;
const filename = `${videoId}-${file.originalname}`;
cb(null, filename);
}
})
});
upload.single('file')(req, res, next);
}
export default multerMiddleware;
Или это лучший способ сделать просто сделать тестовый маршрут в приложении Express и протестировать с ним? Как показано ниже:
app.post('/testMulter', multerMiddleware('temp/'), (req, res, next) => {
res.status(200);
res.json(req.file);
// ...
});
// in test codes
import request from 'supertest'
import App from '../app.ts'
it('multer middleware download files well', async (done) => {
const app = new App.app;
const response = await request(app)
.post('/testMulter')
.attach('file', './test.mp4');
expect(response.file.filename).toBe('test.mp4');
})
Заранее спасибо.