我需要在下面测试这个方法,但它的块中声明了两个变量。
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' }]);
});
});
但是,在浏览器中,测试失败,并显示消息:
预期undefined等于[Object({name:'Link',idc_situacao:'A'}(]
我认为它正在变得未定义,因为这两个局部变量。如何测试此方法?
您的错误来自于您的方法是异步的(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()
);
});
});