测试 BehaviorSubject 不会抛出访问类型错误

Testing a BehaviorSubject throws no access type error

我正在尝试测试一个 behaviorSubject,但不断得到:

Error: <spyOnProperty> : Property myBehaviorSubject$ does not have access type get

这是我在 myService 中声明 behaviorSubject 的方式:

myBehaviorSubject$ = new BehaviorSubject<Array<ObjectA>>([{name: 'name1'}]);

和我的测试:

describe(`myMethod`, () => {
    beforeEach(() => {
      myServiceMock = {
        myBehaviorSubject$: new BehaviorSubject<Array<ObjectA>>(null)
      };
      spyOnProperty(myServiceMock, 'myBehaviorSubject$', 'get').and.returnValue(observableOf([{name: 'name1'}] as Array<ObjectA>));
    });

    it('should access behaviorSubject', () => {
      myServiceMock.myBehaviorSubject$.subscribe( result => {
        //expect;
      });
    });
  });

您正在模拟 属性 访问的 return 值这一事实意味着您实际上根本没有直接使用 属性。我建议直接创建间谍,而不是您正在做的事情,如下所示:

beforeEach(() => {
  myServiceMock = {
    myBehaviorSubject$: jasmine.createSpy('myBehaviorSubject$')
      .and.returnValue(observableOf([{name: 'name1'}] as Array<ObjectA>))
  };
});

这与上面的效果完全相同,但它不会创建 BehaviorSubject 的新实例,这似乎没有被使用。