无法通过身份验证将文件从超级测试上传到 multer

ari*_*nai 6 node.js express supertest

我使用multer来处理我的 Express 应用程序中的文件上传,并且还使用node-sspi进行ntlm身份验证。

使用curl上传文件时,一切正常。但是当我尝试用超级测试做同样的事情时,它不起作用。
Supertest 确实只适用于身份验证或上传,但我还没有成功地同时使用它们。

工作卷曲命令:curl -u user:pass --ntlm -F upload=@filename http://localhost

超级测试代码不起作用:

request(app)
    .post('/upload')
    .auth(username, password)
    .attach('upload', fileToUpload)
    .expect(200)
Run Code Online (Sandbox Code Playgroud)

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

那么,有人知道如何使用超级测试上传带有身份验证的文件吗?

还作为问题发布在supertest 的 GitHub上

dan*_*ett 3

将 Multer 与 Supertest 结合使用

我通过确保参数传递给解决了这个问题upload.single(...)

router.post('/sessions', upload.single('someFileIdentifier'), function(req, res, next) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

与我在附加文件时传递给 supertest 的名称相同:

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

希望这可以帮助!这是一个微妙的问题,带有无用的错误消息:

MulterError: Unexpected field
at wrappedFileFilter (...)
Run Code Online (Sandbox Code Playgroud)

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

模拟认证

根据您的身份验证中间件的设置方式,您可以使用jest.spyOn模拟它来自动接受请求:

jest
  .spyOn(YourCustomAuthClass, 'requireUserAuth')
  .mockImplementation(async (_req, _res, next) => next())
Run Code Online (Sandbox Code Playgroud)

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