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

A-S*_*ani 4 javascript jasmine typescript karma-jasmine angular

and.callThrough当使用创建间谍对象时,似乎并没有实际运行原始实现createSpyObj。举个例子,假设我有一个 Angular 服务,它具有以下帮助器方法:

user.service.ts:

class UserService {

    getFullName(first: string, last: string): string {
         return first + ' ' + last;
    }
}
Run Code Online (Sandbox Code Playgroud)

在规范中,我使用以下方法创建了一个间谍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 ???
});
Run Code Online (Sandbox Code Playgroud)

如何使该getFullName函数按照主类中的实现运行?(我不想存根或调用假函数,但在调用时以某种方式使用主函数实现getFullName)。

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

userServiceSpy.getFullName.prototype = UserService.prototype.getFullName;
Run Code Online (Sandbox Code Playgroud)

第二次尝试:

userServiceSpy.getFullName = UserService.prototyp.getFullName; // This is a compile error. 
Run Code Online (Sandbox Code Playgroud)

A-S*_*ani 8

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

userServiceSpy.getFullName.and.callFake(UserService.prototype.getFullName);
Run Code Online (Sandbox Code Playgroud)