Невозможно загрузить файл в мультиптер из супертеста с аутентификацией
Я использую 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