【发布时间】:2019-02-16 07:41:49
【问题描述】:
我使用的是 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 它不应该是间谍吗?
【问题讨论】:
-
你的课好像有点不对劲。我不认为 Typescript 在类级别上有私有修饰符。并且 setter 需要有一个参数才能正常工作,并且不应该返回值。此外,如果这些是方法中的属性,那么它们应该附有
this。这是您要测试的实际课程,还是随机示例?第一个解决方案应该对你有用。
标签: angular typescript unit-testing jasmine karma-jasmine