У меня есть следующая проблема: когда я запускаю тесты unit/integration для моего проекта Angular с кармой, есть вероятность 50:50, что мои тесты будут успешными/неудачными. В основном это работает на моей машине (: D), но не на нашем сервере сборки, и это делает его действительно ненадежным вообще.
Когда он терпит неудачу, он всегда является загадочным сообщением об ошибке, которое говорит
ошибка скрипта.
...ничего более. Теперь странная вещь в том, что это всегда другой тест, который терпит неудачу.
Вот что я уже сделал или посмотрел:
Это мои зависимости:
"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"
}
Что я должен делать дальше??
Я ценю каждый намек... спасибо
Я, наконец, исправил проблему.
Я как-то пришел на правильный путь и понял, какой тест терпит неудачу или, скорее, вызывает другие тесты.
// 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()
будет также выведен
По моему опыту, во многих случаях такие случайные ошибки происходят из-за грязного состояния, оставшегося позади одного теста, что, в свою очередь, не дает другого теста. AFAIK по умолчанию для Кармы не ожидается или не определено. Я бы попытался прокомментировать (бинарный стиль поиска) первую половину тестов и посмотреть, проходит ли он последовательно.