使用ApplicationInsights-js开玩笑地测试Angular应用时,“ ReferenceError:define not defined”

时间:2019-05-10 12:02:59

标签: angular unit-testing jestjs azure-application-insights

我被分配为团队中的 Angular 应用程序编写单元测试,并且已经完成了 jest 和完成了测试。但是,随着我们的团队将Microsoft的 ApplicationInsights-js 集成到我们的应用程序中,我的测试开始失败。由于公司政策,我无法共享代码,但是我会共享。

我已经在Stack Overflow中搜索了有关 ApplicationInsights-js 的问题,但是没有类似的问题。但是,我在 ApplicationInsights-js 的GitHub页面上发现了这个问题。问题是here。我尝试过修改几乎所有解决方案,但没有成功。根据一名成员的this comment,根据我的理解,我尝试将模块更改为 tsconfig.json 中的其他模块,但未成功。

这是我的错误堆栈跟踪。

  ● Test suite failed to run

    ReferenceError: define is not defined

      1 | import { Injectable } from '@angular/core';
    > 2 | import { AppInsights } from 'applicationinsights-js';
        | ^
      3 | import { environment } from '../../environments/environment';
      4 |
      5 | @Injectable({

      at Object.<anonymous> (node_modules/applicationinsights-js/bundle/ai.module.js:215:1)
      at Object.<anonymous> (src/app/services/app-insights.service.ts:2:1)
      at Object.<anonymous> (src/app/login/login.component.ts:8:1)
      at Object.<anonymous> (src/app/login/login.component.spec.ts:3:1)

tsconfig.json文件

{
    "compileOnSave": false,
    "compilerOptions": {
        "baseUrl": "./",
        "outDir": "./dist/out-tsc",
        "sourceMap": true,
        "declaration": false,
        "esModuleInterop": true,
        "module": "es2015",
        "moduleResolution": "node",
        "emitDecoratorMetadata": true,
        "experimentalDecorators": true,
        "importHelpers": true,
        "target": "es6",
        "types": ["node", "jest"],
        "typeRoots": ["node_modules/@types"],
        "lib": ["es2018", "dom"],
        "paths": {
            "cComponents": ["dist/cComponents"],
            "cComponents/*": ["dist/cComponents/*"]
        }
    }
}


  

这是我的 ApplicationInsights-js 版本。
  “ applicationinsights-js”:“ ^ 1.0.20”


对于我的单元测试,这已经成为一个表演的障碍。任何帮助表示赞赏。如果信息不足,我将尽力提供更多遵守公司政策的信息。

1 个答案:

答案 0 :(得分:1)

之所以发生这种情况,是因为该库是作为AMD模块构建的。最新的SDK以UMD的形式提供,因此可以解决此问题。如果您无法升级,则可以使用之前here

讨论过的几种选择
  1. 使用if (AppInsights !== undefined)
  2. 保护每次致电Appinsight的机会
  3. (从here复制):如果您使用的是笑话,则将一个空的applicationinsights-js.js文件添加到__mocks__文件夹即可解决此问题。如果您需要模拟applicationinsights-js功能,那么您也应该可以在这里完成。 请注意__mocks__区分大小写。有关笑话模拟的更多信息,请see Jest Mock documentation