Невозможно загрузить файл в мультиптер из супертеста с аутентификацией

Я использую multer для обработки загрузки файлов в моем экспресс-приложении, а также я использую node-sspi для аутентификации ntlm.

При загрузке файла с помощью curl все работает нормально. Но когда я пытаюсь сделать то же самое с супертестом, это не работает.
Supertest работает только с аутентификацией или загрузкой, но мне не удалось работать с ними обоими вместе.

рабочая команда curl: curl -u user:pass --ntlm -F upload=@filename http://localhost

Supertest код, который не работает:

request(app)
    .post('/upload')
    .auth(username, password)
    .attach('upload', fileToUpload)
    .expect(200)

Если я опущу attach или auth - это работает (конечно, мне нужно отключить аутентификацию на стороне сервера, но в целом я могу загрузить)

Итак, кто-то знает, как загрузить файл с аутентификацией, используя supertest?

Также опубликовано как вопрос на GitHub супер-тест

0 ответов

Использование Multer с Supertest

Я решил эту проблему, убедившись, что аргумент передан в upload.single(...):

router.post('/sessions', upload.single('someFileIdentifier'), function(req, res, next) {
    ...
}

Было то же имя, которое я передал супертесту при прикреплении файла:

superTestAgent
  .post(`/sessions`)
      .attach('someFileIdentifier', `${__dirname}/test.csv`)
      .end((_err, res) => {
        ...
      })

Надеюсь это поможет! Это тонкая проблема с бесполезным сообщением об ошибке:

MulterError: Unexpected field
at wrappedFileFilter (...)

Вот ссылка на документацию: https://visionmedia.github.io/superagent/

Мокинг аутентификации

В зависимости от того, как настроено ваше промежуточное ПО для аутентификации, вы можете использовать jest.spyOn чтобы издеваться над автоматическим приемом запросов:

jest
  .spyOn(YourCustomAuthClass, 'requireUserAuth')
  .mockImplementation(async (_req, _res, next) => next())

Документация по jest.spyOn: https://jestjs.io/docs/en/jest-object

Другие вопросы по тегам