【发布时间】:2018-04-07 18:06:49
【问题描述】:
我的 API 中有一个图像上传端点,它接受 application/octet-stream 请求并处理这些流。我想为此端点编写测试覆盖率,但不知道如何使用 supertest 流式传输图像。
到目前为止,这是我的代码:
import request from 'supertest'
const testImage = `${__dirname}/../../../assets/test_image.jpg`
describe('Upload endpoint', () => {
test('Successfully uploads jpg image', async () =>
request(app)
.post(`${ROOT_URL}${endpoints.add_image.route}`)
.set('Authorization', `Bearer ${process.env.testUserJWT}`)
.set('content-type', 'application/octet-stream')
.pipe(fs.createReadStream(testImage))
.on('finish', (something) => {
console.log(something)
}))
})
这段代码没有产生任何结果,finish 事件从未被调用,控制台没有记录任何内容,而且这个测试套件实际上没有任何预期通过。我无法将.expect 链接到此请求,否则我会收到此运行时错误:
TypeError: (0 , _supertest2.default)(...).post(...).set(...).set(...).pipe(...).expect 不是功能
这样的事情是怎么做到的?
【问题讨论】:
-
要将数据传输到请求,您必须告诉可读流传输到请求。例如
imageStream.pipe(req). -
async/await仅适用于承诺,不适用于流。您需要更改测试函数以使用(done)并在管道的finish/close事件中调用done()。 -
@popthestack 如果你写了一个完整的工作答案,我很乐意给你赏金。
-
@IsaacHinman,这里的请求对象是什么?如果可能的话,提供一个最小的 git repo,你应该尽快得到修复
-
@TarunLalwani 抱歉,
request是问题标题中所示的supertest库。
标签: javascript streaming jestjs supertest superagent