预期的行为是通过点击我的按钮,它应该导航到测试。我的问题是,我在下面的代码中的期望没有被读取。我还在下面的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测试 "时。
你正试图使用同步测试流来测试一个异步操作。在你的测试中 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/await
或 done
. 喏 你可以阅读如何实现这一点。