В этой статье мы рассмотрим различные методы эффективной загрузки массива файлов с помощью Supertest, популярной библиотеки для тестирования HTTP-серверов Node.js. Мы предоставим примеры кода для каждого метода, что позволит вам выбрать подход, который лучше всего соответствует вашим требованиям.
Метод 1: загрузка файлов как FormData
Один из подходов к загрузке массива файлов — использование объекта FormData в браузере. Этот метод подходит при тестировании загрузки файлов с точки зрения клиента. Вот пример:
const FormData = require('form-data');
const supertest = require('supertest');
const fs = require('fs');
const app = require('../app'); // Replace with your application file
const request = supertest(app);
const files = [
'./path/to/file1.txt',
'./path/to/file2.txt',
'./path/to/file3.txt',
];
const form = new FormData();
files.forEach((file) => {
form.append('files', fs.createReadStream(file));
});
request.post('/upload')
.field('name', 'John Doe')
.attach(form)
.expect(200)
.end((err, res) => {
// Handle response
});
Метод 2: загрузка файлов в виде массива в полезных данных JSON
Если вы предпочитаете отправлять массив файлов как часть полезных данных JSON, вы можете закодировать файлы как строки Base64. Вот пример:
const supertest = require('supertest');
const fs = require('fs');
const app = require('../app'); // Replace with your application file
const request = supertest(app);
const files = [
'./path/to/file1.txt',
'./path/to/file2.txt',
'./path/to/file3.txt',
];
const filesArray = files.map((file) => {
const content = fs.readFileSync(file, 'base64');
return { name: file, content };
});
request.post('/upload')
.send({ files: filesArray })
.expect(200)
.end((err, res) => {
// Handle response
});
Метод 3: загрузка файлов в виде нескольких запросов
Другой подход — отправить несколько запросов, каждый из которых содержит один файл. Этот метод полезен, если вы хотите более детально имитировать загрузку файлов. Вот пример:
const supertest = require('supertest');
const fs = require('fs');
const app = require('../app'); // Replace with your application file
const request = supertest(app);
const files = [
'./path/to/file1.txt',
'./path/to/file2.txt',
'./path/to/file3.txt',
];
async function uploadFiles(files) {
for (const file of files) {
await request.post('/upload')
.attach('file', file)
.expect(200);
}
}
uploadFiles(files)
.then(() => {
// Handle completion
})
.catch((err) => {
// Handle error
});