使用 createSpyObj 创建间谍时 callThrough 不起作用

callThrough not working when creating spy using createSpyObj

当使用 createSpyObj 创建间谍对象时,and.callThrough 似乎并不是 运行 原始实现。例如,假设我有一个具有以下辅助方法的 Angular 服务:

user.service.ts:

class UserService {

    getFullName(first: string, last: string): string {
         return first + ' ' + last;
    }
}

在规范中,我使用 createSpyObj:

创建了一个间谍

user.service.specs.ts

const userServiceSpy = jasmine.createSpyObj<UserService>('UserService', ['getFullName']);

// ....

beforeEach(() => {

    userServiceSpy.getFullName.and.callThought();
    const test = userService.getFullName('test1', 'test2');
    console.log(test);   // < = = = = = ISSUE: test is undefined! WHY ???
});

如何使 getFullName 功能 运行 与主 class 中实现的一样? (我不想存根或调用伪函数,但在调用 getFullName 时以某种方式使用主函数实现)。

我试过用原来的覆盖函数原型:

userServiceSpy.getFullName.prototype = UserService.prototype.getFullName;

第二次尝试:

userServiceSpy.getFullName = UserService.prototyp.getFullName; // This is a compile error. 

我们需要使用callFake,使用原型中的函数实现如下:

userServiceSpy.getFullName.and.callFake(UserService.prototype.getFullName);