测试:角度的spyOn Helper类

Premkumar Jayaseelan

可以spyOn帮忙上课吗?在下面的代码中,StatefulPatternService.init()正在调用WebSocketHelper

我想spyOn WebSocketHelper并模拟 subscribeFn

 export class WebSocketHelper{
  
  private url: string;
  
  constructor(url){
    this.url = url;
    init();
  }
  
  init(){
    // init websocket & other login
  }
}


@Injectable({
  providedIn: 'root'
})
export class StatefulPatternService {
  constructor(){}
  
  private callback(_data){ }
  
  init(){
  
    let wsHelper = new WebSocketHelper('/subscribe/topic'); // <-- How to spyOn???
    wsHelper.subscribeFn = this.callback;
    // ...    
  }
}

如果spyOn无法实现,那么如何将其重写以覆盖此测试?

dmcgrandle

您的挑战将是掌握“ wsHelper”以进行监视。一个想法:您可以重构以使wHelper成为类作用域变量吗?然后,当您在测试套件中获得服务时,可以窥探它,例如:

service = TestBed.get(StatefulPatternService);
let spy = spyOn(service.wsHelper, 'subscribeFn');

更新资料

从评论到我的答案,看来您真正想要做的是验证使用正确的URL调用了构造函数。由于您将其保存在类变量中,因此无需监视构造函数,而只需测试保存的变量的值即可。正如我在评论中提到的那样,您需要做两件事:使wsHelper成为类级别的变量,并在WebSocketHelper类上添加一个返回私有变量'url'的值的方法,以便对其进行测试。我已经设置了一个stackblitz来演示我在这里谈论的内容:STACKBLITZ这是该stackblitz的一个片段:

describe('MyService', () => {
    let myService: StatefulPatternService;

    beforeEach(() => {
        TestBed.configureTestingModule({
            imports: [/* any imports needed */],
            providers: [ StatefulPatternService ]
        });
        myService = TestBed.get(StatefulPatternService);
    });

    it('should be createable', () => {
        expect(myService).toBeTruthy();
    });
    it('should construct wsHelper properly', () => {
        myService.init();
        expect(myService.wsHelper.get_url()).toEqual('/subscribe/topic');
    })
});

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章