我正在使用 Jasmine 2.9,我在监视一个函数时没有问题,无论它是公共(public)的还是私有(private)的,但是我在尝试监视 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 会奏效,但仍然不行。
更新
(上面的代码也更新了)。
尝试更新以返回字符串并使用以下 Jasmine 给我一个错误:
spyOnProperty(RandomService, 'dogsFullName', 'get').and.returnValue('Frank');
本以为是 spy ,却得到了“Frank”
以及函数 isDogAlive
我得到以下信息:
<toHaveBeenCalled> : Expected a spy, but got true.
我知道它给了我正确的值,但如果我spyOn
它不应该是 spy 吗?
最佳答案
与其返回 bool 值 true,不如尝试返回类似“frank”的值。返回值很可能需要一个字符串值而不是 bool 值,这将是问题的原因。
let spyTemp = spyOnProperty(RandomService, 'dogsFullName', 'get').and.returnValue("frank");
然后
expect(spyTemp).toHaveBeenCalled();
关于angular - Jasmine 监视 Typescript 类的 Get() 或 Set() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52282059/