Как получить доступ к значениям .field в Supertest - PullRequest
0 голосов
/ 12 июля 2020

добрый вечер.

Я пытаюсь создать POST-запрос с файлом и некоторыми данными в REST API, который я создаю с помощью NodeJS. Если не ясно, моя цель для этой функции API - сохранить регистр изображения, поэтому я хотел бы отправить файл изображения, имя изображения и его номер в одном запросе.

I В настоящее время я использую Jest / supertest для тестирования и для проверки этой конкретной c функциональности, я пробовал следующее:

    const response = await request(app)
      .post("/uploads/pics")
      .field("name", "PicureName")
      .field("number", "PictureNumber")
      .attach("file", picture);

Я читал это из https://visionmedia.github.io/superagent/#multipart -requests

Моя проблема в том, что я не могу получить значения name и number по моему запросу на моем контроллере, поэтому я не могу использовать их для сохранить объект.

Я пробовал много способов, например:

req.body.name
req.name
req.field.name
req.query.name

, но ни один из них не помог мне.

Я также пробовал распечатать весь запрос , однако я не смог найти ничего, связанного с имя , число или поле .

Может ли кто-нибудь сказать, что я делаю неправильно?

1 Ответ

0 голосов
/ 15 июля 2020

Вы должны использовать промежуточное ПО https://github.com/expressjs/multer для обработки загрузки файлов. Затем req.body будет содержать текстовые поля, если таковые были.

Например,

index.js:

const express = require('express');
const multer = require('multer');
const app = express();

const upload = multer({ dest: 'uploads/' });
app.post('/uploads/pics', upload.single('file'), (req, res) => {
  console.log(req.body);
  console.log(req.file);
  res.sendStatus(200);
});

module.exports = app;

index.test.js:

const request = require('supertest');
const app = require('./');
const path = require('path');
const { expect } = require('chai');

describe('62862866', () => {
  it('should pass', async () => {
    const picture = path.resolve(__dirname, './test.jpg');
    const response = await request(app)
      .post('/uploads/pics')
      .field('name', 'PicureName')
      .field('number', 'PictureNumber')
      .attach('file', picture);
    expect(response.status).to.be.eq(200);
  });
});

результат интеграционного теста:

  62862866
[Object: null prototype] { name: 'PicureName', number: 'PictureNumber' }
{ fieldname: 'file',
  originalname: 'test.jpg',
  encoding: '7bit',
  mimetype: 'image/jpeg',
  destination: 'uploads/',
  filename: '181b96eb9044aac5d50c8c1e3159a120',
  path: 'uploads/181b96eb9044aac5d50c8c1e3159a120',
  size: 0 }
    ✓ should pass (84ms)


  1 passing (103ms)
...