Эффективные способы загрузки массива файлов в Supertest: подробное руководство

В этой статье мы рассмотрим различные методы эффективной загрузки массива файлов с помощью 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
  });