Angular测试路线。SPEC HAS NO EXPECTATIONS应该导航到测试。

问题描述 投票:1回答:1

预期的行为是通过点击我的按钮,它应该导航到测试。我的问题是,我在下面的代码中的期望没有被读取。我还在下面的Karma中添加了一张我的输出图片。

  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测试 "时。

Karma displays output in google chrome.

angular unit-testing karma-jasmine
1个回答
1
投票

你正试图使用同步测试流来测试一个异步操作。在你的测试中 expect(location.path()).toBe('/tests') 后执行。fixture.whenStable() 但你的函数在这之前完成了执行,所以你需要告诉jasmine等待 fixture.whenStable() 来解决。更简单的方法是返回承诺,这样jasmine就会知道要等它来终止规范。

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')
    });
  });

对于更复杂的情况,你可以使用 async/awaitdone. 你可以阅读如何实现这一点。

© www.soinside.com 2019 - 2024. All rights reserved.