我有一个使用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);
一切都很好但是当我尝试在我的服务中测试该方法时,我得到一个错误,测试无法找到变量pdfMake。考虑到它是由index.html加载的,这是有道理的。
如何在测试中用模拟替换此库?
我尝试过使用间谍但是因为makePdf不是一个不起作用的功能。 spyOn(service, 'makePdf')
。
我尝试将其设置为变量,但也没有效果我得到:严格模式禁止隐式创建全局属性&pdfMake&#39;
pdfMake = {
createPdf: jasmine.createSpy('createPdf').and.returnValue({
download: jasmine.createSpy('download')
}
}
答案 0 :(得分:0)
我遇到了同样的问题并解决了在单元测试中将pdfMake模拟插入全局变量窗口的问题。所以,在你的情况下会是这样的:
window.pdfMake = {
createPdf: jasmine.createSpy('createPdf')
.and.returnValue({
download: jasmine.createSpy('download')
}),
};
答案 1 :(得分:0)
我只是通过以下更改解决了这个问题-
在.ts文件中全局声明pdfMake变量,例如-
declare var pdfMake;
然后在您的.spec文件中像这样模拟pdfMake函数-
window['pdfMake'] = {
createPdf: function (param) {
return {
open: function () {
return true;
},
download: function () {
return true;
}
};
}
};