首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带防护装置的角5单元试验路线

带防护装置的角5单元试验路线
EN

Stack Overflow用户
提问于 2018-05-24 12:03:52
回答 1查看 2.7K关注 0票数 1

我有一条路需要阻止学生进入。我试图为此编写一个单元测试,但它不起作用。

但是,当我试图编写一个导航到/class的测试时,保护程序上的canActivate方法不会被调用。

这是守卫:

代码语言:javascript
复制
canActivate(next: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
  const user = StoreActions.User.getCurrentUser(store.getState());

  if(!user) {
    this.router.navigate(['/pages/login']);
    return false;
  }

  if(user.username.match(/\d/) !== null) {
    this.router.navigate(['/home']);
    return false;
  }

  return true;
}

而测试:

代码语言:javascript
复制
it(
  'should activate guard when a student tries to access /class',
  fakeAsync(
    inject([StudentGuard], (guard: StudentGuard) => {
      const spy = spyOn(guard, 'canActivate');
      store.dispatch(StoreActions.User.setCurrentUser(TestObjects.User.Student));
      router.navigate(['/class/1']);
      tick();
      expect(spy).toHaveBeenCalled();
      discardPeriodicTasks();
    })
  )
);

以下是具体的路线:

代码语言:javascript
复制
{
  path: '',
  children: {
    path: 'class',
    loadChildren: './components/class/class.module#ClassModule',
    canActivate: [StudentGuard]
  }
}

expect语句在测试中失败。但是,如果我实际上模拟了一个学生,然后在浏览器中导航到/class,守卫就会像预期的那样工作,但是它不会在测试中激活。我怎样才能在测试中激活它?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-05-25 16:25:40

我刚刚想明白了。我发现了一些类似的问题,说业力在等待一个可以观察到的问题被解决。我意识到router.navigate回报了一个承诺,业力一定在等待这一切得到解决。我不得不把我的测试改为:

代码语言:javascript
复制
it(
  'should activate guard when a student tries to access /class',
  fakeAsync(
    inject([StudentGuard], (guard: StudentGuard) => {
      const spy = spyOn(guard, 'canActivate');
      store.dispatch(StoreActions.User.setCurrentUser(TestObjects.User.Student));
      router.navigate(['/class/1']).then(() => { // added .then
          expect(spy).toHaveBeenCalled(); // put expect here, AFTER navigate is resolved
      });
      tick();
      discardPeriodicTasks();
    })
  )
);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50508945

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档