【问题标题】:Create mock file instead of reading from disk for testing multer with supertest request创建模拟文件而不是从磁盘读取以使用超测试请求测试 multer
【发布时间】:2021-12-01 16:47:01
【问题描述】:

你好,提前谢谢你!

我正在尝试使用 jest 和 supertest 测试 multer 文件大小和计数验证,但我在创建假文件时遇到了问题。

这个想法是使用“假”文件而不是从磁盘读取真实文件

这是我目前得到的:

  const formData = new jsdom.window.FormData()

  const mockFile = {
    size: 10 * 1024 * 1024,
    type: 'text/plain'
  } as Blob

  for (let i = 0; i < 12; i++) {
    formData.append('files', mockFile)
  }

  await request(app)
    .post(`/api/file-upload/`)
    // .send(mockFile)
    .attach('files', mockFile)
    // .attach('files', mockFile)
    .expect(200)

我尝试使用.send() 发送文件,但据我从文档中了解,它用于发送json 数据,所以.attach 是正确的。使用.send() 我总是得到req.files undefined,使用.attach() 我得到TypeError: source.on is not a function

我假设问题可能与我尝试附加的“文件”有关,我可能会错误地模拟它。所以问题是,如何模拟文件并将其与超测试请求一起使用,而不是将真实文件存储在磁盘上并使用不同的附加方式,如.attach('files', '/path-to-file/file.etc')

【问题讨论】:

    标签: typescript jestjs multer supertest


    【解决方案1】:

    我找到了创建特定大小的模拟文件(缓冲区)的解决方案。学分去here

    .attach() 方法与发送缓冲区完美配合,这就是您创建特定大小的模拟缓冲区以测试您的 multer 文件上传端点的方式:

    const buffer = Buffer.alloc(1024 * 1024 * 10, '.')
    

    所以工作示例是:

    const buffer = Buffer.alloc(1024 * 1024 * 10, '.')
    
    await request(app)
      .post(`/api/file-upload/`)
      .attach('files', buffer)
      .expect(200)
    

    【讨论】:

      猜你喜欢
      • 2015-08-27
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 2020-12-02
      • 1970-01-01
      • 2010-11-24
      • 2019-01-26
      • 2012-04-25
      相关资源
      最近更新 更多