我正在使用Jasmine 2.9,并且在监视某个函数(无论是公共函数还是私有函数)时都没有遇到问题,但是我很难在类级别上尝试监视get
或set
函数。
private class RandomService {
public dogsHealth = 0;
private get personsFullName(): string {
return firstName + lastname;
}
private set personsLocation(address: string, city: string, country: string): string {
return address + city + country;
}
public get dogsFullName(): string {
return dogFirstName + dogLastName;
}
public get isDogAlive(): boolean {
return dogsHealth <= 0 ? true : false;
}
}
我尝试过的解决方案:
spyOnProperty(RandomService, 'dogsFullName', 'get').and.returnValue(true);
spyOnProperty(RandomService, 'dogsFullName').and.returnValue(true);
spyOn(RandomService, 'dogsFullName').and.returnValue(true);
spyOnProperty(RandomService.dogsFullName, 'dogsFullName', 'get').and.returnValue(true);
目前,我尚未在线找到解决方案,但会继续寻找。我知道get或set函数会创建一个变量,所以我认为解决方案4可能会起作用,但仍然没有。
(上面的代码也已更新)。
尝试更新以返回字符串并使用以下茉莉花给我一个错误:
spyOnProperty(RandomService, 'dogsFullName', 'get').and.returnValue('Frank');
Expected a spy, but got 'Frank'
对于功能isDogAlive
,我得到以下信息:
<toHaveBeenCalled> : Expected a spy, but got true.
我知道它给了我正确的价值,但是如果我spyOn
那就不是间谍吗?
答案 0 :(得分:4)
不要返回布尔值true,而是尝试返回类似“ frank”的值。返回值很可能期望使用字符串值而不是布尔值,这可能是导致问题的原因。
let spyTemp = spyOnProperty(RandomService, 'dogsFullName', 'get').and.returnValue("frank");
然后
expect(spyTemp).toHaveBeenCalled();
答案 1 :(得分:0)
以下是您的一些选择:
spyOnProperty(RandomService.prototype, 'dogsFullName', 'get').and.returnValue('ben');
// or
service = new RandomService();
spyOnProperty(service, 'dogsFullName', 'get').and.returnValue('ben');
或者如果您的方法在类上是静态的:
export class RandomService {
static dogFirstName: string;
static dogLastName: string;
public static get dogsFullName() {
return RandomService.dogFirstName + RandomService.dogLastName;
}
}
spyOnProperty(RandomService, 'dogsFullName', 'get').and.returnValue('ben');