我正在尝试使用Chai验证我的代码返回的svg是否正确。如果我没有设置内容类型,我可以检查res.text如下
return chai.request(app).get('/chart.svg?lat=-39&long=174')
.then((res: any) => {
expect(res.text).to.eql('<svg></svg>');
});
但是,如果我的服务器设置这样的内容类型
res.set('Content-Type', 'image/svg+xml')
res.status(HttpStatus.OK).send(response);
res.text丢失了。据我所知,res.content和res.body也没用。
当Content-Type设置为'image / svg + xml'时,如何验证输出是否正确?
使用其他答案,我拼凑了这个解决方案
function parseSvgXml (res: any, cb : any) {
res.body = '';
res.on('data', (chunk: any) => {
res.body += chunk;
});
res.on("end", function () {
cb(null, res.body);
});
}
我添加了一个done
参数,该参数在运行断言后在end
之后调用
it('should return a current badge as svg', (done) => {
this.uvcStub = sinon.stub(UVChartServiceClass, 'UVChartService').callsFake((args: any) => {
return new MockUVChartService('<svg></svg>');
});
chai.request(app).get('/current.svg?lat=-39&long=174&sky=cloudy')
.buffer()
.parse(parseSvgXml)
.end((err: any, res: any) => {
expect(res.type).to.eql('image/svg+xml');
expect(res.body).to.eql('<svg></svg>');
done();
});
});