我使用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)
如果我省略attach
或auth
- 它有效(当然我需要在服务器端禁用身份验证,但一般情况下我可以上传)
那么,有人知道如何使用supertest上传带有auth的文件吗?
上发布为问题答案 0 :(得分:2)
我通过确保将参数传递给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