Angular单元测试Jest spyOn报错及returnValue替换咨询
Angular单元测试:Jest模拟Observable订阅返回值的正确写法
这是Jest和Jasmine spy API的差异导致的问题——Jasmine用.and.returnValue()的链式写法,但Jest的SpyInstance没有.and属性,得换用Jest自身的mock方法:
直接替换写法
把.and.returnValue()改成.mockReturnValue()即可,你的代码修改后如下:
jest.spyOn(validationFacade, 'validateOrder') .mockReturnValue(of(validationResponseMock).pipe(delay(1)));
进阶:自定义模拟逻辑
如果需要根据传入的参数动态返回不同值,可以用.mockImplementation():
jest.spyOn(validationFacade, 'validateOrder') .mockImplementation((request: ValidationRequest) => { // 这里可以根据request的内容自定义返回结果 return of(validationResponseMock).pipe(delay(1)); });
本质原因是Jest的spy API设计和Jasmine不同,它把mock相关方法直接挂在SpyInstance上,不需要通过.and中间层调用。
内容的提问来源于stack exchange,提问作者szelelaci
相关产品推荐
相关产品推荐

