import { describe, expect, it, vi } from 'vitest';
|
|
import { exportLabelLayoutPdf } from './labelPdf';
|
|
function createDependencies() {
|
const canvas = document.createElement('canvas');
|
vi.spyOn(canvas, 'toDataURL').mockReturnValue('data:image/png;base64,label');
|
const pdf = {
|
addImage: vi.fn(),
|
addPage: vi.fn(),
|
save: vi.fn(),
|
};
|
return {
|
canvas,
|
dependencies: {
|
createCanvas: vi.fn().mockResolvedValue(canvas),
|
createPdf: vi.fn().mockReturnValue(pdf),
|
},
|
pdf,
|
};
|
}
|
|
describe('exportLabelLayoutPdf', () => {
|
it('exports every label sheet as one landscape A4 page in source order', async () => {
|
const { dependencies, pdf } = createDependencies();
|
await exportLabelLayoutPdf(
|
{
|
fileName: '标签打印',
|
html: '<div><section class="jnpf-label-sheet">第一页</section><section class="jnpf-label-sheet">第二页</section></div>',
|
paperHeight: 210,
|
paperWidth: 297,
|
},
|
dependencies,
|
);
|
|
expect(dependencies.createPdf).toHaveBeenCalledWith({ format: [297, 210], orientation: 'landscape', unit: 'mm' });
|
expect(dependencies.createCanvas.mock.calls.map(([sheet]) => sheet.textContent)).toEqual(['第一页', '第二页']);
|
expect(pdf.addPage).toHaveBeenCalledOnce();
|
expect(pdf.addPage).toHaveBeenCalledWith([297, 210], 'landscape');
|
expect(pdf.addImage).toHaveBeenCalledTimes(2);
|
expect(pdf.addImage).toHaveBeenLastCalledWith('data:image/png;base64,label', 'PNG', 0, 0, 297, 210, undefined, 'FAST');
|
expect(pdf.save).toHaveBeenCalledWith('标签打印.pdf');
|
expect(document.querySelector('[aria-hidden="true"]')).toBeNull();
|
});
|
|
it('rejects invalid content and removes the temporary DOM after a render failure', async () => {
|
const { dependencies } = createDependencies();
|
await expect(exportLabelLayoutPdf({ fileName: 'empty', html: '<div></div>', paperHeight: 210, paperWidth: 297 }, dependencies)).rejects.toThrow(
|
'未找到可导出的标签页面',
|
);
|
expect(document.querySelector('[aria-hidden="true"]')).toBeNull();
|
|
dependencies.createCanvas.mockRejectedValueOnce(new Error('capture failed'));
|
await expect(
|
exportLabelLayoutPdf({ fileName: 'failed', html: '<section class="jnpf-label-sheet"></section>', paperHeight: 210, paperWidth: 297 }, dependencies),
|
).rejects.toThrow('capture failed');
|
expect(document.querySelector('[aria-hidden="true"]')).toBeNull();
|
});
|
});
|