如何使用 spyOn 替换服务的 return 值?

How to replace return value of a service using spyOn?

有以下服务:

export class CounterService {
  random: any = {
    value: 123,
    date: 456,
  };
 
  getRandom() {
    return this.random;
  }
}

某些组件使用此服务。在此组件中,变量 'random' 被分配了来自服务的值:

export class Page1Component implements OnInit {
  random: any;
 
  constructor(private counterService: CounterService) {}
 
  ngOnInit() {
    this.random = this.counterService.getRandom();
  }
}

我尝试使用以下单元测试对其进行测试:

it('should fill random', () => {
  const random = {
    value: 123456,
    date: 123456,
  };
  spy = spyOn(counterService, 'getRandom').and.returnValue(random);
  expect(component.random).toEqual(random);
});

但是我收到以下错误消息:

Expected $.value = 123 to equal 123456. Expected $.date = 456 to equal 123456.

你能帮我解决这个单元测试吗?

ngOnInit 在初始化时被调用。

如果想测试ngOnInit方法里面的操作,需要在初始化组件之前mock服务,或者手动再触发一次ngOnInit。