【问题标题】:How to create a property on an Angular Jasmine spy?如何在 Angular Jasmine 间谍上创建属性?
【发布时间】:2023-04-01 17:47:02
【问题描述】:

我正在尝试在我的 Angular 应用程序中测试一个相当复杂的服务。为此,我需要能够模拟服务具有的不同依赖项的数量,我正在使用间谍来实现这一点。

该服务使用其构造函数中的两个依赖项做了一些不同的事情,在我开始测试服务之前,我需要确保它正确构造,因此我需要满足构造函数的要求。

构造函数有两个单独的订阅,一个在返回Observable<string> 的方法上,一个在BehaviourSubject<boolean> 上。

constructor(
    private _translate: TranslateService,
    private _policiesService: PoliciesService,
  ) {
    _translate.get('services.filter').subscribe((filterObject: any) => {
      // do stuff...
    });

    this._policiesService.isPolicyLocked.subscribe(activePolicyLockState => {
      // do stuff...
    });
  }

我可以轻松地模拟第一个订阅,方法是使用一个间谍,然后在我的 beforeEach() 中分配一个方法和一个返回值,如下所示。

beforeEach(() => {
        spy_TranslateService = jasmine.createSpyObj('TranslateService', ['get', 'setDefaultLang']);
        spy_TranslateService.get.and.returnValue(of(translationFilterObject));

        //etc.. 
    });

但我不能对我的行为主题执行此操作,因为它不是一种方法,它是 PoliciesService 的属性。有没有一种方法可以模拟一个属性并给它一个特定的返回值,类似于我如何使用方法?最好不必使用 getter 和 setter。

【问题讨论】:

标签: angular jasmine karma-runner


【解决方案1】:

试试:

spy_PoliciesService = jasmine.createSpyObj('PoliciesService', []);
spy_PoliciesService.isPolicyLocked = new BehaviorSubject(...); // mock what it should return in the ...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-20
    • 1970-01-01
    • 1970-01-01
    • 2017-09-26
    • 2015-05-02
    相关资源
    最近更新 更多