callFake和returnValue之间的唯一区别是callFake可以基于自定义逻辑(参数/环境)返回不同的值吗?

还有其他区别吗?

最佳答案

callFake(()=> {...})接受回调函数



组件文件:

@Component(...)
export class DependencyComponent {
  constructor(private service: RandomService){....}
  .....
  sampleMethod() {
   return this.service.randomMethod();
  }
  .....
}

上述组件的单元测试用例:
it('test callFake vs returnValue', () => {
  let randomService= new RandomService();
  let component = new DependencyComponent(randomService);
  spyOn(randomService, 'randomMethod').and.callFake(() => 4)
  expect(component.sampleMethod()).toBe(4)
  spyOn(randomService, 'randomMethod').and.returnValue(10);
  expect(component.sampleMethod()).toBe(10)
})

在上述情况下,两种方法都是正确的。



组件文件:
@Component(...)
export class DependencyComponent {
  constructor(private service: RandomService){....}
  .....
  sampleMethod(val) {
  return this.service.randomMethod(val);
  }
  .....
}

上述组件的单元测试用例:
it('test callFake vs returnValue', () => {
  let randomService= new RandomService();
  let component = new DependencyComponent(randomService);
  spyOn(randomService, 'randomMethod').and.callFake((param) => param+4)
  expect(component.sampleMethod(4)).toBe(8);
  expect(component.sampleMethod(12)).toBe(16)
})

当执行component.sampleMethod(4)时,它将调用this.service.randomMethod(4)。由于使用randomMethod()监视and.callFake,因此4将作为and.callFake的回调函数的参数传递。

关于javascript - Jasmine :这是returnValue和callFake之间的唯一区别吗?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43839185/

10-11 11:59