我有一个使用PDFMake生成PDF的项目。要使用它,我将文件包括在我的index.html
中<script src='js/pdfmake.js'></script>
<script src='js/vfs_fonts.js'></script>
在pdfmake.js内部声明global["pdfMake"]
,然后允许我在服务中使用库。
pdfservice:
pdfMake.createPdf(docDefinition).download(fileName);
一切都很好,但是当我尝试在服务中测试THS方法时,我会遇到一个错误,即测试找不到变量PDFMake。考虑到它是由index.html。
加载的,这是有道理的。如何在测试中的模拟中替换此库?
我尝试使用间谍,但是由于makepdf并不是一个行不通的函数。spyOn(service, 'makePdf')
。
我尝试将其设置为变量,但这也没有起作用,我得到了:严格的模式禁止全局属性" pdfmake"
隐含创建pdfMake = {
createPdf: jasmine.createSpy('createPdf').and.returnValue({
download: jasmine.createSpy('download')
}
}
我遇到了同样的问题,并解决了单元测试内的全局变量窗口上的pdfmake模拟。因此,就您而言,将是这样的:
window.pdfMake = {
createPdf: jasmine.createSpy('createPdf')
.and.returnValue({
download: jasmine.createSpy('download')
}),
};
我只是通过进行以下更改来解决此问题 -
在您的.ts文件中在全球范围内声明pdfmake变量,例如 -
declare var pdfMake;
然后在您的.spec文件中模拟PDFMake函数 -
window['pdfMake'] = {
createPdf: function (param) {
return {
open: function () {
return true;
},
download: function () {
return true;
}
};
}
};