我正在使用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)
如果我省略
attach
或auth
-它可以正常工作(当然,我需要在服务器端禁用身份验证,但总的来说,我可以上传)因此,有人知道如何使用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