angular - Jasmine 监视 Typescript 类的 Get() 或 Set() 函数

标签 angular typescript unit-testing jasmine karma-jasmine

我正在使用 Jasmine 2.9,我在监视一个函数时没有问题,无论它是公共(public)的还是私有(private)的,但是我在尝试监视 getset 时遇到了困难> 在类里面发挥作用。

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/

相关文章:

javascript - 简单的 React 计数器不起作用,console.log 也不能使用State 变量吗?

asp.net-mvc - Entity Framework 验证的单元测试

eclipse 中的 Javascript 单元测试

c# - 使用 UIAutomation 进行单元测试

Angular 2 : How to conditionally load a Component in a Route asynchronously?

node.js - Socket.io 在部署后无法工作 - 抛出错误 - 405(不允许)

angular - Angular CLI 版本和 Angular Core 版本之间的兼容性?

angular - 如何按特定顺序运行测试 - Playwright YAML 文件

typescript - 使用 TypeScript 3 项目引用时出现 "Cannot find module"错误

angular - 覆盖我的可观察变量会杀死当前订阅者吗?