Angular маршруты испытаний: SPE C НЕ ИМЕЕТСЯ НИКАКОГО ОЖИДАНИЯ, следует перейти к / tests - PullRequest
2 голосов
/ 30 апреля 2020

Ожидаемое поведение заключается в том, что при нажатии на мою кнопку он должен перейти к / tests. Моя проблема в том, что мои ожидания в коде ниже не читаются. Я также добавил фотографию своего выхода в Карму ниже.

  it("should navigate to /tests", () => {
    const location = TestBed.get(Location)
    const buttons = de.queryAll(By.css('button')); 
    const nativeButton: HTMLButtonElement = buttons[1].nativeElement; 
    nativeButton.click(); 
    fixture.detectChanges(); 
    fixture.whenStable().then(() => {
        expect(location.path()).toBe('/tests')
    });
  });

При запуске «ng test»:

Karma displays output in google chrome.

1 Ответ

1 голос
/ 30 апреля 2020

Вы пытаетесь проверить асинхронную операцию c, используя синхронный тестовый поток. В вашем тесте expect(location.path()).toBe('/tests') выполняется после того, как fixture.whenStable() разрешен, но ваша функция завершает выполнение sh до того, как это произойдет, поэтому вы должны указать jasmine дождаться разрешения fixture.whenStable(). Проще всего вернуть обещание, чтобы Жасмин знала, что ему нужно дождаться, пока он прекратит действие c.

it("should navigate to /tests", () => {
    const location = TestBed.get(Location)
    const buttons = de.queryAll(By.css('button')); 
    const nativeButton: HTMLButtonElement = buttons[1].nativeElement; 
    nativeButton.click(); 
    fixture.detectChanges(); 
    return fixture.whenStable().then(() => {
        expect(location.path()).toBe('/tests')
    });
  });

Для более сложных сценариев ios вы можете использовать async/await или done. Здесь вы можете прочитать, как это реализовать.

...