83 lines
3.3 KiB
JavaScript
83 lines
3.3 KiB
JavaScript
describe('snapshot', () => {
|
|
before(() => {
|
|
return pdftest.api.connect('http://localhost:3000');
|
|
});
|
|
|
|
function loadElement({ document, tagName, src }) {
|
|
const element = document.createElement(tagName);
|
|
const loaded = new Promise(resolve => element.addEventListener('load', () => resolve(element)));
|
|
element.src = src;
|
|
document.body.appendChild(element);
|
|
return loaded;
|
|
}
|
|
|
|
const defaultSettings = { html2canvas: { logging: false } };
|
|
const pageBreakSettings = pagebreak => Object.assign({}, defaultSettings, { pagebreak, jsPDF: { orientation: 'portrait', unit: 'in', format: 'letter' } });
|
|
const defaultCondition = (window, customSettings, src) => {
|
|
const settings = Object.assign({}, defaultSettings, customSettings);
|
|
return window.html2pdf().set(settings).from(src || window.document.body).outputPdf('arraybuffer');
|
|
};
|
|
|
|
const conditions = {
|
|
default: {
|
|
runner: defaultCondition,
|
|
name: file => `${file}.pdf`,
|
|
},
|
|
legacy: {
|
|
runner: window => window.html2pdf(window.document.body, defaultSettings).outputPdf('arraybuffer'),
|
|
name: file => `${file}.pdf`,
|
|
},
|
|
margin: {
|
|
runner: window => defaultCondition(window, { margin: 1, jsPDF: { unit: 'in' } }),
|
|
name: file => `${file}_margin.pdf`,
|
|
},
|
|
selectMainId: {
|
|
runner: window => defaultCondition(window, {}, window.document.getElementById('main')),
|
|
name: file => `${file}.pdf`,
|
|
},
|
|
pagebreakLegacy: {
|
|
runner: window => defaultCondition(window, pageBreakSettings({ mode: 'legacy' })),
|
|
name: file => `${file}_legacy.pdf`,
|
|
},
|
|
pagebreakCss: {
|
|
runner: window => defaultCondition(window, pageBreakSettings({ mode: 'css' })),
|
|
name: file => `${file}_css.pdf`,
|
|
},
|
|
pagebreakAvoidAll: {
|
|
runner: window => defaultCondition(window, pageBreakSettings({ mode: 'avoid-all' })),
|
|
name: file => `${file}_avoid-all.pdf`,
|
|
},
|
|
pagebreakSpecify: {
|
|
runner: window => defaultCondition(window, pageBreakSettings({ before: '.before', after: '.after', avoid: '.avoid' })),
|
|
name: file => `${file}_specify.pdf`,
|
|
},
|
|
};
|
|
|
|
const filesToTest = {
|
|
'blank': [ 'default' ],
|
|
'lorem-ipsum': [ 'default', 'legacy', 'margin' ],
|
|
'all-tags': [ 'default' ],
|
|
'css-selectors': [ 'selectMainId' ],
|
|
'pagebreaks': [ 'pagebreakLegacy', 'pagebreakCss', 'pagebreakAvoidAll', 'pagebreakSpecify' ],
|
|
};
|
|
|
|
Object.keys(filesToTest).forEach(file => describe(file, () => {
|
|
let iframe;
|
|
|
|
before(async () => {
|
|
iframe = await loadElement({ document, tagName: 'iframe', src: `/base/test/reference/${file}.html` });
|
|
await loadElement({ document: iframe.contentDocument, tagName: 'script', src: '/base/src/index.js' });
|
|
chai.spy.on(iframe.contentWindow.html2pdf.Worker.prototype, 'save', function () { return this.then(function save() {}); });
|
|
});
|
|
after(() => {
|
|
chai.spy.restore();
|
|
document.body.removeChild(iframe);
|
|
});
|
|
|
|
filesToTest[file].forEach(condition => it(`should match snapshot for ${condition} settings`, async () => {
|
|
const pdf = await conditions[condition].runner(iframe.contentWindow);
|
|
await expect(pdf).to.matchPdfSnapshot({ interactive: true, customSnapshotIdentifier: conditions[condition].name(file) });
|
|
}));
|
|
}));
|
|
});
|