NgZone не определен при тестировании углового компонента - PullRequest
0 голосов
/ 14 ноября 2018

Я разрабатываю компонент выбора диапазона дат в Angular и испытываю трудности с тестированием, если входные значения неверны.

Мой ngOnInit () выполняет проверку минимальных / максимальных значений даты .

Когда я пытаюсь написать тест для этого случая

Жасмин возвращается:

Ожидаемая функция для выдачи RangeError, но она выдала TypeError: Cannot читать свойство 'ngZone' из неопределенного.

Исследование С.О. сообщения привели меня к созданию макета класса NgZone и предоставили его в TestBed, что просто приводит к большему количеству проблем, таких как «подписка не определена».

Я думал, что это может быть связано с EventEmitter, но я пытался удалить это, и я получаю те же ошибки.

Во-первых, как я могу устранить ошибку NgZone? Есть несколько С.О. посты на эту тему, но я, кажется, буду коротким.

Во-вторых, как я могу правильно проверить, что мой ngOnInit() ведет себя так, как ожидалось, если в него переданы неверные значения?

Обновление

Даже несмотря на то, что я изолировал свою функцию проверки ввода, я все еще не мог проверить, вызвала ли эта функция ошибку. Вместо этого мне пришлось проверить detectChanges(), которая вызывает все остальное:

expect(() => fixture.detectChanges()).toThrow();

1 Ответ

0 голосов
/ 17 ноября 2018

Сервис NgZone используется для доступа к Api для поддержки выполнения кода внутри и за пределами пространства ZoneJS. Однако, если вы найдете в своем тесте полезным его использование, вы можете создать экземпляр службы, используя:

let ngService = Testbed.get(NgZone)

Если ваша цель - протестировать жизненный цикл ngOnInit () компонента, Angular предоставил инструменты для этого в API-интерфейсе Testbed , используя ComponentFixture, где вы можете управлять генерацией обнаружения изменений для запуска ngOnInit, например так:

describe('tests', () => {

  let component: MyComponent;
  let fixture: ComponentFixture<MyComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
        imports: [ ],
        declarations: [ MyComponent ],
    }).compileComponents();
    fixture = TestBed.createComponent(MyComponent);
    component = fixture.componentInstance;

  }));


  it('simple test', async(() => {
    fixture.detectChanges(); // triggers cd and passes through component lifecycle ngOnInit

  }));

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...