【问题标题】:Angular test - Testing a method with local variablesAngular test - 使用局部变量测试方法
【发布时间】:2022-01-02 02:50:29
【问题描述】:

我需要在下面测试这个方法,但它在其块内声明了两个变量。

loadUsers() {
    this.secService.getAllUser().subscribe(
      (data: any) => {
        let Data = data;
        let user = <Array<any>>Data.User;
        this.users = user.filter(f => f.idc_situacao == 'A');
      },
      error => {
        this.util.showError(error);
      }
    );
  }

基本上,服务会发出 http.get 请求并仅返回数据。

public getAllUser() {
    return this.http.get<any>(this.apiSecurity.concat("/user"));
  }

测试:

describe('#loadUsers', () => {
const users = [
  {
    Company: 'Test',
    User: [
      { name: 'Link', idc_situacao: 'A' },
      { name: 'Zelda', idc_situacao: 'I' },
    ],
  },
];
    it('test', () => {
      spyOn(secService, 'getAllUser').and.returnValue(of(users));
      component.loadUsers();
      expect(component.users).toEqual([{ name: 'Link', idc_situacao: 'A' }]);
    });
  });

但是,在浏览器中测试失败并显示以下消息:
预期未定义等于 [ Object({ name: 'Link', idc_situacao: 'A' }) ]

我认为它变得未定义,因为有两个局部变量。如何测试此方法?

【问题讨论】:

  • 我怀疑它来自局部变量。你能发布完整的代码吗? (组件代码和完整的规范文件)。

标签: angular typescript testing jasmine karma-runner


【解决方案1】:

您的错误来自您的方法是异步的 (getAllUser)。如果你在

之后添加一个console.log
this.users = user.filter(f => f.idc_situacao == 'A')

您会看到测试结果出现在 console.log 之前。

你必须等待component.loadUsers();的结果

it('test', () => {
  spyOn(secService, 'getAllUser').and.returnValue(of(users));
  const result$ = component.loadUsers();
  result$.subscribe(// write yours tests...expect()
    );
  });
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-11
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2019-02-02
    • 1970-01-01
    相关资源
    最近更新 更多