Angular 6 - обещание в хуках жизненного цикла делает другой тест неудачным - PullRequest
0 голосов
/ 24 сентября 2018

У меня проблема с угловым тестом.Я не знаю, если это ошибка или я делаю что-то не так.

У меня есть 2 компонента.Тот, который использует обещания в ngOnInit, и тот, который полностью пуст.

Компонент, использующий обещания, выглядит следующим образом:

import {Component, OnInit} from '@angular/core';
import {User, UserManager} from 'oidc-client';

@Component({
  selector: 'app-test',
  templateUrl: './test-promise.component.html',
  styleUrls: ['./test-promise.component.css']
})
export class TestPromiseComponent implements OnInit {
  private readonly userManager: UserManager;

  public async ngOnInit(): Promise<any> {
    return this.getDataStore('', '', '');
  }

  public getDataStore(url: string, key: string, keyType: string): Promise<any> {

    return this.getToken();
  }

  public getToken(): Promise<string> {

    return this.getUser().then(user => {
      return user.access_token;
    });
  }

  public getUser(): Promise<User> {

    return this.userManager.getUser();
  }
}

В операторах импорта вы можете видеть, какие у меня зависимости и чтоЯ использую Oidc Client.

Мой другой компонент выглядит следующим образом (просто пустой):

import { Component } from '@angular/core';

@Component({
  selector: 'app-test',
  templateUrl: './test.component.html',
  styleUrls: ['./test.component.css']
})
export class TestComponent {

}

Тестовая спецификация для обоих компонентов просто следует стандартной спецификации при создании нового компонента,вот так для компонента, который использует обещания:

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

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [
        TestPromiseComponent
      ]
    }).compileComponents().then();
  }));

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

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

Это моя установка.Теперь очень странно, что когда я запускаю тест, то TestComponent дает сбой - даже если на самом деле происходит сбой TestPromiseComponent.Смотрите результаты здесь:

TestComponent fails even though TestPromiseComponent is the one failing

Так что теперь для большого вопроса: Почему TestComponent терпит неудачу, даже если это фактически TestPromiseComponent, которыйне получается?

Может кто-нибудь объяснить мне:)

Редактировать 1:

Вот тест для TestComponent:

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

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      declarations: [
        TestComponent
      ]
    }).compileComponents().then();
  }));

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

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

Редактировать 2: Я использую следующие версии кармы и жасмина:

  • "jasmine-core": "~ 2.99.1",
  • "jasmine-spec-reporter": "~ 4.2.1",
  • "карма": "~ 1.7.1",
  • "karma-chrome-launcher": "~ 2.2.0 ",
  • " Карма-охват-Стамбул-репортер ":" ~ 2.0.0 ",
  • " Карма-Жасмин ":" ~ 1.1.1 ",
  • "Карма-Жасмин-HTML-репортер": "^ 0.2.2",

1 Ответ

0 голосов
/ 24 сентября 2018

Странно иметь 2 beforeEach (а также один асинхронный). Я не знаю, как jasmine будет вызывать один и тот же (в параллели? В каком порядке они определены? Кстати, вы пропустили ключевое слово await в вашемасинхронная функция, поэтому вы не возвращаете правильно обещание, которое вызовет странное поведение для теста:)

beforeEach должно быть больше похоже на:

beforeEach(() => {
    return TestBed.configureTestingModule({
      declarations: [
        TestComponent
      ]
    }).compileComponents().then( () => {
      fixture = TestBed.createComponent(TestComponent);
      component = fixture.componentInstance;
      fixture.detectChanges();
    });
  }));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...