2016-12-16 81 views
1

我有一个使用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”

pdfMake = { 
    createPdf: jasmine.createSpy('createPdf').and.returnValue({ 
    download: jasmine.createSpy('download') 
    } 
} 
+0

它应该工作。你有看看http://stackoverflow.com/questions/13794637/undefined0referenceerror-strict-mode-forbids-implicit-creation-of-global-prop? – tanmay

+0

如果其他人有这个问题首先摆脱隐含的创建错误请确保你首先声明你的变量,所以'var pdfMake'和当你创建你的间谍attatch它的窗口对象 – Jackthomson

回答

0

的隐性创作我得到了同样的问题,解决了插入pdf在单元测试中模拟全局变量窗口。所以,在你的情况将是这样的:

window.pdfMake = { 
    createPdf: jasmine.createSpy('createPdf') 
    .and.returnValue({ 
    download: jasmine.createSpy('download') 
    }), 
};