我正在使用multer处理快速应用中的文件上传,并且还在使用node-sspi进行ntlm身份验证。

当上传带有curl的文件时,一切正常。但是,当我尝试使用supertest进行相同操作时,它不起作用。
Supertest确实仅与auth或仅与上载一起使用,但是我还没有成功地将它们与两者一起使用。

工作curl命令:curl -u user:pass --ntlm -F upload=@filename http://localhost
无法运行的 super 测试代码:

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

如果我省略attachauth-它可以正常工作(当然,我需要在服务器端禁用身份验证,但总的来说,我可以上传)

因此,有人知道如何使用supertest使用auth上载文件吗?

也已在supertest's GitHub上发布为问题

最佳答案

将Multer与Supertest一起使用

我通过确保将参数传递给upload.single(...)来解决此问题:

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

与附加文件时传递给supertest的名称相同:
superTestAgent
  .post(`/sessions`)
      .attach('someFileIdentifier', `${__dirname}/test.csv`)
      .end((_err, res) => {
        ...
      })

希望这可以帮助!这是一个微妙的问题,带有无用的错误消息:
MulterError: Unexpected field
at wrappedFileFilter (...)

这是文档的链接:https://visionmedia.github.io/superagent/#multipart-requests

模拟身份验证

根据身份验证中间件的设置方式,可以使用jest.spyOn对其进行模拟以自动接受请求:
jest
  .spyOn(YourCustomAuthClass, 'requireUserAuth')
  .mockImplementation(async (_req, _res, next) => next())

有关jest.spyOn的文档:https://jestjs.io/docs/en/jest-object#jestspyonobject-methodname

10-06 14:18