Случайная ошибка скрипта. в угловых единицах / интеграционные тесты

1

У меня есть следующая проблема: когда я запускаю тесты unit/integration для моего проекта Angular с кармой, есть вероятность 50:50, что мои тесты будут успешными/неудачными. В основном это работает на моей машине (: D), но не на нашем сервере сборки, и это делает его действительно ненадежным вообще.

Когда он терпит неудачу, он всегда является загадочным сообщением об ошибке, которое говорит

ошибка скрипта.

...ничего более. Теперь странная вещь в том, что это всегда другой тест, который терпит неудачу.

Вот что я уже сделал или посмотрел:

  • https://github.com/karma-runner/karma/issues/1268
  • https://github.com/karma-runner/karma/issues/543
  • У меня нет круговых зависимостей (по крайней мере, ng build/serve не жалуется на это)
  • Я понял, что это может быть связано с нарушением правил перекрестного происхождения, но я фактически не запускаю XHR или ленивую загрузку других вещей (по крайней мере, я так думаю)

Это мои зависимости:

"dependencies": {
    "@angular/animations": "^6.0.9",
    "@angular/cdk": "^6.4.0",
    "@angular/common": "^6.0.9",
    "@angular/compiler": "^6.0.9",
    "@angular/core": "^6.0.9",
    "@angular/flex-layout": "^6.0.0-beta.16",
    "@angular/forms": "^6.0.9",
    "@angular/http": "^6.0.9",
    "@angular/material": "^6.4.0",
    "@angular/platform-browser": "^6.0.9",
    "@angular/platform-browser-dynamic": "^6.0.9",
    "@angular/platform-server": "^6.0.9",
    "@angular/router": "^6.0.9",
    "@ngrx/effects": "^6.0.1",
    "@ngrx/router-store": "^6.0.1",
    "@ngrx/store": "^6.0.1",
    "@ngrx/store-devtools": "^6.0.1",
    "core-js": "^2.5.7",
    "devextreme": "^18.1.4",
    "devextreme-angular": "^18.1.4",
    "i": "^0.3.6",
    "jquery": "^3.3.1",
    "ngx-scrollbar": "^2.1.0",
    "node-sass": "^4.9.0",
    "npm": "^6.2.0",
    "rxjs": "^6.2.2",
    "stream": "0.0.2",
    "web-animations-js": "^2.3.1",
    "zone.js": "^0.8.26"
  },
  "devDependencies": {
    "@angular-devkit/build-angular": "~0.6.3",
    "@angular/cli": "^6.0.8",
    "@angular/compiler-cli": "^6.0.9",
    "@angular/language-service": "^6.0.9",
    "@types/jasmine": "^2.8.8",
    "@types/jasminewd2": "^2.0.3",
    "@types/node": "^10.5.2",
    "codelyzer": "^4.4.2",
    "fs-extra": "^6.0.1",
    "git-describe": "^4.0.3",
    "gulp": "^4.0.0",
    "gulp-param": "^1.0.3",
    "gulp-run": "^1.7.1",
    "hogan.js": "^3.0.2",
    "husky": "^0.14.3",
    "jasmine-core": "^3.1.0",
    "jasmine-spec-reporter": "^4.2.1",
    "jszip": "^3.1.5",
    "karma": "^2.0.4",
    "karma-chrome-launcher": "~2.2.0",
    "karma-cli": "~1.0.1",
    "karma-coverage-istanbul-reporter": "^2.0.1",
    "karma-jasmine": "^1.1.2",
    "karma-jasmine-html-reporter": "^1.2.0",
    "license-checker": "^20.1.0",
    "lint-staged": "^7.2.0",
    "markdown-include": "^0.4.3",
    "prettier": "^1.13.7",
    "protractor": "^5.3.2",
    "readline-sync": "^1.4.9",
    "run-sequence": "^2.2.1",
    "stylelint": "^9.3.0",
    "stylelint-config-recommended-scss": "^3.2.0",
    "stylelint-config-standard": "^18.2.0",
    "stylelint-scss": "^3.1.3",
    "ts-node": "^6.2.0",
    "tslint": "^5.11.0",
    "tslint-config-prettier": "^1.13.0",
    "typescript": "2.7.2",
    "yargs": "^11.1.0"
  }

Что я должен делать дальше??

Я ценю каждый намек... спасибо

  • 0
    Также, если я запускаю тестовую команду с параметром --source-map false, я не получаю полезную трассировку стека.
Теги:
angular
karma-jasmine
jasmine
karma-runner

2 ответа

0
Лучший ответ

Я, наконец, исправил проблему.

Я как-то пришел на правильный путь и понял, какой тест терпит неудачу или, скорее, вызывает другие тесты.

// causing part in the tests
beforeEach(() => {
   fixture = TestBed.createComponent(FilterSidebarComponent);
   component = fixture.componentInstance;
   component.data = {} as DataClass;
   fixture.detectChanges();
 });

Проблема заключалась в том, что внутри подписки в компоненте я вызываю конкретный метод класса DataClass:

this.attributeXY.subscribe(event => {
    this.data.reset(); <-- reset() was undefined
    if (event) {
     // do something 
     ...
    }
  })

Остается вопрос, почему в этом случае сбрасывание пустого объекта не сработало? Я ожидал, что метод reset() будет также выведен

1

По моему опыту, во многих случаях такие случайные ошибки происходят из-за грязного состояния, оставшегося позади одного теста, что, в свою очередь, не дает другого теста. AFAIK по умолчанию для Кармы не ожидается или не определено. Я бы попытался прокомментировать (бинарный стиль поиска) первую половину тестов и посмотреть, проходит ли он последовательно.

  • 0
    спасибо за совет, я буду исследовать это

Ещё вопросы

Сообщество Overcoder
Наверх
Меню