Node JS测试 - 模拟文件上传

3
我正在使用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 模块没有将其视为文件上传。
非常感谢。
1个回答

1
我不是直接针对node-mocks-http进行处理,但我使用supertest来模拟Node.js测试中的文件上传以达到相同的目的。
在我的情况下,我的Express中间件使用Formidable来解析表单数据,特别是文件上传;supertestFormidable非常配合。
以下是一段代码示例。 它测试了我的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中。对我来说效果很好。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接