«ReferenceError: определить не определено» при тестировании приложения Angular с помощью jest с использованием ApplicationInsights-js - PullRequest
0 голосов
/ 10 мая 2019

Мне поручено написать модульные тесты для нашего Angular приложения в нашей команде, и я выполнил настройку и настройку для jest и получил тесты за работой. Но так как наша команда интегрировала Microsoft ApplicationInsights-js в наше приложение, мои тесты начали проваливаться. Я не могу поделиться кодом из-за политики компании, но я поделюсь тем, что могу.

Я искал в переполнении стека эту проблему, касающуюся ApplicationInsights-js , но не было подобных. Но я обнаружил, что это проблема на странице GitHub ApplicationInsights-js . Проблема здесь . Я попытался адаптировать почти все решения, но безуспешно. Согласно этому комментарию участника, в соответствии с моим пониманием, я пытался изменить модуль на другие в 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 file

{
    "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 Ответ

1 голос
/ 10 мая 2019

Это происходит потому, что библиотека построена как модуль AMD.Последний SDK поставляется как UMD, и поэтому он решит эту проблему.Если вы не можете выполнить обновление, есть несколько вариантов, которые вы могли бы использовать, которые были обсуждены ранее здесь

  1. Защищайте каждый вызов приложения с помощью if (AppInsights !== undefined)
  2. (скопировано с здесь ): если вы используете jest, то добавление пустого файла applicationinsights-js.js в папку __mocks__ устраняет эту проблему.Если вам нужно смоделировать функциональность applicationinsights-js, вы можете сделать это и здесь. Обратите внимание, что __mocks__ чувствителен к регистру .Для получения дополнительной информации о шутливых макетах см. Документацию по Jest Mock
...