Angular Jasmine单元测试observable subscribe不会触发

Angular Jasmine单元测试observable subscribe不会触发,angular,unit-testing,jasmine,karma-jasmine,Angular,Unit Testing,Jasmine,Karma Jasmine,我在用Angular 5和Jasmine和Karma。我试图测试某个函数是否工作,但在单元测试期间我的订阅不会触发。这会导致我的单元测试失败,因为我正在使用jasmine的done函数。 我想让这个单元测试成功 我已经将超时时间间隔设置为20秒,以查看是否只需要一段时间(不应该) 我也尝试过使用async和fakeasync,但它不会触发。我可以订阅触发器吗 这是我得到的代码: describe('FilterService', () => { let service: FilterS

我在用Angular 5和Jasmine和Karma。我试图测试某个函数是否工作,但在单元测试期间我的订阅不会触发。这会导致我的单元测试失败,因为我正在使用jasmine的done函数。 我想让这个单元测试成功

我已经将超时时间间隔设置为20秒,以查看是否只需要一段时间(不应该)

我也尝试过使用async和fakeasync,但它不会触发。我可以订阅触发器吗

这是我得到的代码:

describe('FilterService', () => {
  let service: FilterService;

  beforeEach(() => {
    TestBed.configureTestingModule({
      providers: [FilterService]
    });
    service = TestBed.get(FilterService);
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 20000;
  });

  it("SetItemsToFilterByAndApplyFilters should set ItemsToFilterBy and set the InFilter property", (done: DoneFn) => {
    //arrange
    let item1: any = new Organisation();
    item1.Id = 1;
    item1.InFilter = true;
    let item2: any = new Organisation();
    item1.Id = 2;
    item1.InFilter = false;

    let itemNew1: any = new Organisation();
    itemNew1.Id = 1;
    let itemNew2: any = new Organisation();
    itemNew2.Id = 2;

    service.SetItemsToFilterBy([item1, item2]);
    let spy = spyOn(service.ItemsToFilterBy$, 'subscribe');

    //act
    service.SetItemsToFilterByAndApplyFilters([itemNew1, itemNew2]);
    //assert
    service.ItemsToFilterBy$.subscribe(result => {
      let result1 = _.find(result, item => {
        return item.Id == itemNew1.Id;
      });

      let result2 = _.find(result, item => {
        return item.Id == itemNew2.Id;
      });

      expect(result1.InFilter).toBeTruthy();
      expect(result2.InFilter).toBeFalsy();
      done();
    });
  });
});
这是感谢Basavaraj Bhusani的代码

      it("SetItemsToFilterByAndApplyFilters should set ItemsToFilterBy and set the InFilter property", (done: DoneFn) => {

    //arrange
    let spy = spyOn(service.ItemsToFilterBy$, 'subscribe').and.callThrough();

    let item1: any = new Organisation();
    item1.Id = 1;
    item1.InFilter = true;
    let item2: any = new Organisation();
    item2.Id = 2;
    item2.InFilter = false;

    let itemNew1: any = new Organisation();
    itemNew1.Id = 1;
    let itemNew2: any = new Organisation();
    itemNew2.Id = 2;

    service.SetItemsToFilterBy([item1, item2]);

    //act
    service.SetItemsToFilterByAndApplyFilters([itemNew1, itemNew2]);

    //assert
    service.ItemsToFilterBy$.subscribe(result => {
      let result1 = _.find(result, item => {
        return item.Id == itemNew1.Id;
      });

      let result2 = _.find(result, item => {
        return item.Id == itemNew2.Id;
      });

      expect(result1.InFilter).toBeTruthy();
      expect(result2.InFilter).toBeFalsy();
      done();
    });
    expect(spy).toHaveBeenCalled();
  });
});

如果
service.ItemsToFilterBy$
主题

监视方法时,请使用jasmine的
callThrough()
方法。
spyOn(service.ItemsToFilterBy$,'subscribe')

i、 e


请在此处阅读
callThrough

请给出您的服务代码。
const spy = spyOn(service.ItemsToFilterBy$, 'subscribe').and.callThrough();