我正在尝试为根组件 *s
运行单元测试,其中 app.component.ts
HTML只包含 { {1}}
因此,基于以下路由器配置,应用程序使用app.component.html
立即在<router-outlet></router-outlet>
启动应用程序:
http://localhost:port/login
我的问题是,当我在 redirectTo
中使用以下方法运行 `export const appRoutes: Routes = [
{ path: '', redirectTo: 'login', pathMatch: 'full'},
{ path: 'login', component: LoginComponent},
{ path: 'add', component: RegisterComponent},
....
];
export const routes: ModuleWithProviders = RouterModule.forRoot(appRoutes);`
:
ng test --sm=false
测试失败并显示: app.component.spec.ts
但是当我使用时
这个方法/语法:
it( 'navigate to "" redirects you to /login', fakeAsync(() => {
router.navigate([""]);
tick();
expect(location.path()).toBe("/login");
})
);
然后测试通过。
所以,在这种情况下,我无法弄清楚使用 Expected '' to be '/login'
功能等的确切错误。
什么是最佳做法 - 尝试使用第一种方法并修复失败的测试,或者第二项功能是否足够我的测试?
我应该在第一种方法中更改/修复什么才能使用它而不是第二种?
对于更多输入,这里是我正在使用的角度和角度cli版本:
it( "root should be able to navigate to `/login`", fakeAsync(() => {
fixture.detectChanges();
// initial navigation
router.navigate([""]).then(() => {
expect(router.url).toEqual("/login");
});
})
);
答案 0 :(得分:2)
问题是Platform.runLater()
函数不会等到promise在这种情况下解决。您可以使用tick
或更高的值等到承诺返回但不准确。
。所以你不需要盲目地设置超时值以等到承诺。所以第二种方法更准确