Как написать модульные тесты для PDF Kit для node js? - PullRequest
0 голосов
/ 07 мая 2020

Я пишу генератор pdf, используя https://github.com/foliojs/pdfkit внутри маршрута сервера hapi, я успешно реализовал его, но мне трудно написать для него модульные тесты.

Я погуглил это, но пока не нашел ответа, а в документации пакета ничего не упоминается о тестировании.

Кто-нибудь написал модульный тест для своей библиотеки?

Спасибо за вашу помощь y'all!

Edit: основное внимание в тесте уделяется тому, как работает 'do c', экземпляр pdfkit, вот функция, которую я хочу протестировать, функции, которые не добавлены, являются просто разделением повторяющегося кода pdf

const generatePdf = async (request, h) => {
return new Promise(async (resolve, reject) => {
    try {
        const doc = initPdf();
        const {curated, address, photo} = await dataHandler(request, h);

        // Title page
        doc.font('Lato-Semibold')
            .fontSize(16)
            .text(
                `${address.address1}, ${address.city} ${address.stateProvince} ${address.postalCode}`,
                {align: 'center'}
            );
        doc.fontSize(14).text(' ');

        if (photo.base64Photo) {
            handleImage(doc, photo.base64Photo);
        }

        // Others page(s)
        doc.addPage();

        renderSections(doc, curated.others);

        // Amenities page(s)
        doc.addPage();

        doc.font('Lato-Semibold')
            .fontSize(26)
            .text(
                await getTranslatedString(
                    locale,
                    `px-hospitality.amenity.category.AMENITIES`
                ),
                {align: 'center'}
            );

        // Hack to add a space between text and next header
        doc.fontSize(14).text(' ');
        renderSections(doc, curated.amenities);

        generatePageNumbers(doc);

        // write to PDF
        const chunks = []; // contains the base64 string

        doc.on('data', (chunk) => {
            chunks.push(chunk);
        });

        doc.on('end', () => {
            // the stream is at its end, so push the resulting base64 string to the response
            const result = Buffer.concat(chunks);
            resolve({code: 200, result});
        });

        doc.on('error', (err) => {
            reject({code: 500, error});
        });
        doc.end(); // will trigger the stream to end
    } catch (error) {
        reject({code: 500, error});
    }
});

};

...