创建模拟文件而不是从磁盘读取以使用超级测试请求测试 multer
Create mock file instead of reading from disk for testing multer with supertest request
你好,先谢谢你!
我正在尝试使用 jest 和 supertest 测试多个文件大小和计数验证,但我遇到了创建假文件的问题。
想法是使用“假”文件而不是从磁盘读取真实文件
这是我目前得到的:
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')
我找到了创建特定大小的模拟文件(缓冲区)的解决方案。致谢 .
.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)
你好,先谢谢你!
我正在尝试使用 jest 和 supertest 测试多个文件大小和计数验证,但我遇到了创建假文件的问题。
想法是使用“假”文件而不是从磁盘读取真实文件
这是我目前得到的:
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')
我找到了创建特定大小的模拟文件(缓冲区)的解决方案。致谢
.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)