茉莉单元测试定义了作为全局变量导入的库



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

};

最新更新