使用 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);
当使用 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);