Angular8 Тестирование разных результатов для каждого прогона - PullRequest
1 голос
/ 22 января 2020

Я присоединился к проекту, основанному на Angular8.

Каждый раз, когда я запускаю тесты, я получаю разные результаты на моей локальной машине. Когда я делаю sh свою ветку в Gitlab Runner, у меня тоже разные результаты.

Так мы запускаем тесты:

ng test --no-watch --no-progress --browsers=ChromeHeadlessCI

Мы используем следующие версии:

"devDependencies": {
    "@angular-builders/custom-webpack": "^8.2.0",
    "@angular-devkit/build-angular": "^0.803.20",
    "@angular/cli": "^8.3.4",
    "@angular/compiler-cli": "^8.2.14",
    "@angular/language-service": "^8.2.6",
    "@types/jasmine": "^2.8.16",
    "@types/node": "^10.14.18",
    "@typescript-eslint/eslint-plugin": "^2.10.0",
    "@typescript-eslint/parser": "^2.10.0",
    "codelyzer": "^5.0.1",
    "eslint": "^6.7.2",
    "eslint-config-google": "^0.14.0",
    "jasmine-core": "^3.4.0",
    "jasmine-spec-reporter": "^4.2.1",
    "karma": "^3.1.4",
    "karma-chrome-launcher": "^2.2.0",
    "karma-cli": "^1.0.1",
    "karma-coverage-istanbul-reporter": "^2.1.0",
    "karma-htmlfile-reporter": "~0.3",
    "karma-jasmine": "^2.0.1",
    "karma-jasmine-html-reporter": "^1.4.2",
    "karma-junit-reporter": "^1.2.0",
    "protractor": "^5.4.2",
    "rxjs-tslint": "^0.1.7",
    "ts-node": "~7.0.1",
    "tslint": "^5.20.0",
    "typescript": "3.5.3",
    "webpack": "^4.41.2"
  } 

Иногда я понимаю ошибки теста, например :

TheComponent should create FAILED
    Uncaught [object Object] thrown

Я исправил таким образом:

if (eOneObject && eOneObject.length > 0) {

Я добавил if (eOneObject к условию, поэтому тест исправлен.

Но тогда у меня есть некоторые ошибки в других компонентах, которые уже прошли тесты для моих коллег, например:

MessageComponent should create FAILED
    Uncaught [object Object] thrown
@Component({
  selector: 'message-component',
  templateUrl: './message.component.html',
  styleUrls: ['./message.component.css'],
  host: { '(window:resize)': 'onResize($event)' }
})
export class MessageComponent implements OnInit {

  constructor(public dialogRef: MatDialogRef<MessageComponent>,
    public sanitizer: DomSanitizer,
    @Inject(MAT_DIALOG_DATA) public data: DialogData) { }

  ngOnInit() {
  }
}

Этот MessageComponent не имеет "ничего" в коде. И это прошло испытания для моих коллег.

Я не могу понять:

  • Почему я получаю разные результаты в локальных тестах и ​​Gitlab Runner (когда версии совпадают)
  • Почему моя ветвь (на Gitlab runner) выдает ошибку в тестовых компонентах, что нормально в тестах моих коллег
  • ng test Проверяет ли компоненты случайным образом Я имею в виду. Разве это не проверяет все в каждом запуске?

Извините, но я не смог найти ответ на все эти проблемы. Заранее спасибо.

Тесты:

describe('MessageComponent', () => {
  let component: MessageComponent;
  let fixture: ComponentFixture<MessageComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [ BrowserAnimationsModule, ReactiveFormsModule, FormsModule, MaterialWrapperModule, BrowserDynamicTestingModule ],
      declarations: [ MessageComponent ],
      providers: [
        { provide: MatDialogRef, useCase: {} },
        { provide: MAT_DIALOG_DATA, useCase: {} }
      ]
    })
    .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(MessageComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});
describe('TheComponent', () => {
  let component: TheComponent;
  let fixture: ComponentFixture<TheComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [ ReactiveFormsModule, BrowserAnimationsModule, MaterialWrapperModule, FormsModule, HttpClientModule],
      declarations: [TheComponent],
      providers: [ErService, PrService, VtService, TService]
    })
      .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(TheComponent);
    component = fixture.componentInstance;
    fixture.detectChanges();
  });

  it('should create', () => {
    expect(component).toBeTruthy();
  });
});

1 Ответ

1 голос
/ 22 января 2020

Одна из причин сбоя MessageComponent состоит в том, что host: { '(window:resize)': 'onResize($event)' } здесь недопустим, такой компонент не имеет onResize, метод + $event не определен (в правильной IDE должны быть выделены такие вещи).

Вторая причина: useCase: {} (должно быть useValue) недействительно; отметьте ссылки

Следующая ошибка: providers: [ErService, PrService, VtService, TService], не проверяется и может делать ненужные вещи. Пожалуйста, ознакомьтесь с документацией , чтобы увидеть, как выполняется насмешка для сервисов, и общее руководство поможет понять, как тестировать различные части приложения

Последнее: проверьте это Ошибка запуска кармы - Без головы Chrome - ОШИБКА Uncaught [объект Объект]

TheComponent мог бы сделать это (код не предоставлен), но, глядя на сервисы - думаю, это может иметь место

Надеюсь, это поможет:)

...