@nestjsforge/pdfme
Testing
Unit and integration testing strategies for @nestjsforge/pdfme.
Unit test with mock
import { Test } from '@nestjs/testing';
import { PdfmeService } from '@nestjsforge/pdfme';
import { InvoiceService } from './invoice.service';
describe('InvoiceService', () => {
let service: InvoiceService;
let pdfme: jest.Mocked<PdfmeService>;
beforeEach(async () => {
const module = await Test.createTestingModule({
providers: [
InvoiceService,
{
provide: PdfmeService,
useValue: {
generate: jest.fn().mockResolvedValue(new Uint8Array([37, 80, 68, 70])),
},
},
],
}).compile();
service = module.get(InvoiceService);
pdfme = module.get(PdfmeService);
});
it('should generate invoice PDF', async () => {
const pdf = await service.generateInvoice({ number: 'INV-001', total: 100 });
expect(pdfme.generate).toHaveBeenCalledTimes(1);
expect(pdf).toBeInstanceOf(Uint8Array);
});
});Integration test
import { readFileSync } from 'fs';
describe('PdfmeService (integration)', () => {
it('should generate a real PDF', async () => {
const module = await Test.createTestingModule({
imports: [
PdfmeModule.forRoot({
fonts: {
NotoSans: {
data: readFileSync('./assets/fonts/NotoSans-Regular.ttf'),
fallback: true,
},
},
}),
],
}).compile();
const service = module.get(PdfmeService);
const pdf = await service.generate({ template: simpleTemplate, inputs: [{}] });
expect(pdf).toBeInstanceOf(Uint8Array);
// PDF magic bytes: %PDF
expect(pdf[0]).toBe(37);
expect(pdf[1]).toBe(80);
});
});