如何从Jasmine单元测试的ActivatedRoute数据断言Observable

问题描述

如何断言从activateRoute.data返回的Observable实际上是从route.data调用一个Observable,并且在类上将其设置为Observable而非静态值?

    describe('AssetListContainerComponent (SHALLOW TEST)',() => {
  
     let component: AssetListContainerComponent;
     let fixture: ComponentFixture<AssetListContainerComponent>;
     let mockActivatedRoute;
     let mockPage;

    beforeEach(() => {
    
    Testbed.configureTestingModule({
      declarations: [AssetListContainerComponent],schemas: [NO_ERRORS_SCHEMA],providers: [
        {
          provide: ActivatedRoute,useValue: mockActivatedRoute
        }
      ]
    });

    fixture = Testbed.createComponent(AssetListContainerComponent);
    component = fixture.componentInstance;
    });


    beforeEach(() => {
    const mockAsset = {
      id: 'id',type: 'type',value: 'value'
    } as Asset;

    mockPage = {
      count: 11,next: 'http//next',prevIoUs: 'http://prevIoUs',size: '111',current: '41',results: [mockAsset]
    };

    mockActivatedRoute = { data: hot('-a-',{a: mockPage}) };

    });

     it('should create',() => {
      expect(component).toBeTruthy();
    });

    it('should assign page object from resolver route',fakeAsync(() => {

    fixture.detectChanges();

    const expected = cold('-a-',{a: mockPage});

    expect(component.page$).toBeObservable(expected);

    }));
   });


    it('should assign page object from resolver route',{a: mockPage});

    expect(component.page$).toBeObservable(expected);

    }));
   });
export class AssetListContainerComponent implements OnInit {

  page$: Observable<Dag<Plasset>>;

  constructor(private route: ActivatedRoute) {}

  ngOnInit(): void {

    this.page$ = this.route.data.pipe(
      map(res => {
        return res['data'];
      })
    );
  }

}

这发生在ngOnInit()生命周期中。当然这是一个常见的业务逻辑案例,但是我找不到任何不包含“ subscribe()`

的示例。

我是Angular单元测试的新手:)这很难。.

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)