#node.js #svg #content-type #chai
#node.js #svg #тип содержимого #chai
Вопрос:
Я пытаюсь проверить правильность svg, возвращаемого моим кодом, с помощью Chai. Если я не задам тип содержимого, я могу проверить res.text, как показано ниже
return chai.request(app).get('/chart.svg?lat=-39amp;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 тоже бесполезны.
Как я могу проверить правильность вывода, если для типа содержимого установлено значение «изображение / svg xml»?
Ответ №1:
Используя другие ответы, где я собрал это решение
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=-39amp;long=174amp;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();
});
});