柴回应svg

问题描述 投票:0回答:1

我正在尝试使用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'时,如何验证输出是否正确?

node.js svg content-type chai
1个回答
0
投票

使用其他答案,我拼凑了这个解决方案

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();
        });

});
© www.soinside.com 2019 - 2024. All rights reserved.