未定义的单元测试不是对象(评估“ this.groups.map”)

时间:2018-07-12 12:15:59

标签: javascript angular unit-testing typescript karma-jasmine

我有那个剧本

  groups: Group[] = []

  constructor(

  ) {
    this.groups = AuthenticationService.getUserGroups()
    let menuList: any = []
    this.groups.map((permission: Group) => {
      menuList.push(...this.menuGenerator[permission.nomeGrupo.split('-')[1]])
    })
  }

当我运行npm run test时,仅出现该错误TypeError: undefined is not an object (evaluating 'this.groups.map')。我想知道什么是最好的解决方法。我将spyOn放在getUserGroups上,但是不起作用。如何为变量添加一些值?非常感谢!我真的需要学习!

1 个答案:

答案 0 :(得分:1)

放置间谍将替换您的功能。

这意味着它不再返回任何内容。

这意味着您从

开始
groups = [];

然后监视功能

spyOn(AuthenticationService, 'getUserGroups');

然后您获得

groups = undefined;

要解决此问题,只需在间谍中返回一个值:

spyOn(AuthenticationService, 'getUserGroups').and.returnValue([]);

编辑因为您在构造函数中,所以无法监视组件本身,因为它没有创建。

很高兴为您提供原型继承。除了监视服务实例,您还可以监视原型:

spyOn(AuthenticationService.prototype, 'getUserGroups').and.returnValue([]);

您应该将此放在describe('MyComponent')下,因此这是第一件事。