静态全局变量vi的单元测试 _paq

问题描述

我在我的angular7应用程序中使用matomo(以前是piwik)进行网站分析。

根据文档,我将跟踪代码粘贴到应用程序的index.html文件中。内容如下:

<script type="text/javascript">
var _paq = window._paq = window._paq || [];
/* tracker methods like "setCustomDimension" should be called before "trackPageView" */
_paq.push(['trackPageView']);
_paq.push(['enableLinkTracking']);
(function() {
  var u="//example.com/";
  _paq.push(['setTrackerUrl',u+'matomo.PHP']);
  _paq.push(['setSiteId','43']);
  var d=document,g=d.createElement('script'),s=d.getElementsByTagName('script')[0];
  g.type='text/javascript'; g.async=true; g.src=u+'matomo.js'; s.parentNode.insertBefore(g,s);
})();

因此,这有助于从example.com/matomo.js网址加载matomo.js静态文件。这将公开全局变量_paq。

现在,我想在我的matomo.service.ts文件中使用此全局变量来跟踪事件。由于_paq不是角度变量,因此我在matomo.service.ts文件中明确声明了这样的内容

declare let _paq: any[][];

现在,我可以在此服务文件中创建不同的方法,以将分析数据推送到服务器。

matomo.service.ts

...
declare let _paq: any[][];
...

trackEvents(category,action,label) {
  _paq.push(['trackEvent',category,label];
}

这在任何组件(例如示例)中都能很好地发挥作用

app.component.ts

constructor(private matomoService: matomoService) {}
trackEvent(category,label) {
    this.matomoService.trackEvents(category,label);
}

一切正常,直到这里。但是,当我尝试运行单元测试时,它会使调用方法的所有组件(this.matomoService.trackEvents(...)失败,并显示错误

参考错误:未定义_paq

我尝试了其他类似问题中建议的不同方法,但是没有用。

任何人都可以在这里帮助我。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)