我正在使用node-mocks-http来测试我的API,我在模拟文件上传时遇到了问题。这是我的尝试:
var response = buildResponse()
var request = http_mocks.createRequest({
method: 'POST',
url : '/test',
headers: {
'Content-Type' : 'multipart/form-data;',
'Transfer-Encoding': 'identity'
},
files: {
project: fs.createReadStream('tests/fixtures/test.json')
}
})
response.on('end', function() {
response._getData().should.equal('finished');
done();
})
app.handle(request, response)
知道为什么这不会导致正确的文件上传?至少,express-fileupload模块没有将其视为一个。
非常感谢。
答案 0 :(得分:0)
我不是直接解决node-mocks-http
,而是使用supertest
模拟Node.js测试中的文件上传,以实现相同的目标。
就我而言,我的Express中间件使用Formidable来解析表单数据,尤其是文件上传; supertest
与Formidable
的搭配非常好。
下面是一段代码示例。它测试了我的Express中间件,该中间件将文件上传到Minio S3存储桶。
it('posts a file', done => {
const app = express()
app.post(
'/api/upload',
minioMiddleware({ op: expressMinio.Ops.post }),
(req, res) => {
if (req.minio.error) {
res.status(400).json({ error: req.minio.error })
} else {
res.send(`${req.minio.post.filename}`)
}
}
)
request(app)
.post('/api/upload')
.attach('file', '/tmp/a-file-to-upload.txt')
.expect(200, done)
})
在此测试中, supertest
将上传文件/tmp/a-file-to-upload.txt
,中间件将依次将文件放入Minio S3。对我来说很好。