无法通过身份验证从supertest上传文件到multer

时间:2016-06-23 10:47:59

标签: node.js express supertest

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

使用curl上传文件时,一切正常。但是,当我尝试对supertest做同样的事情时,它无法正常工作 Supertest只使用auth或只是上传,但我没有成功地与他们一起工作。

working curl命令:curl -u user:pass --ntlm -F upload=@filename http://localhost

不起作用的超级代码:

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

如果我省略attachauth - 它有效(当然我需要在服务器端禁用身份验证,但一般情况下我可以上传)

那么,有人知道如何使用supertest上传带有auth的文件吗?

也在supertest's GitHub

上发布为问题

1 个答案:

答案 0 :(得分:2)

将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/#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