Ответ Chai для svg

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

});