1

他の投稿で同じエラーを見たことがありますが、うまくいきませんでした。

URL から queryParam を読み取る必要がある Angular コンポーネントがあります。たとえば、http://localhost:4200/sample-page?page=33 という数字をコンポーネントのローカル変数に格納したい場合などです。

/**
 * Set page by url parameter
 */
export const setPaginationMarkByUrlParam = (activatedRoute): number => {
  // Get page param from Url to set pagination page
  const pageParam = activatedRoute.snapshot.queryParams;
  return pageParam.page ? Number(pageParam.page) : 1;
};

この関数は別のファイルにあり、queryParam を取得するコンポーネントの ngOnInit に由来する activeRoute をパラメーターとして配置します。

ngOnInit() {
    this.page = setPaginationMarkByUrlParam(this.activatedRoute);
}

このコードは完全に機能しますが、Jenkins パイプラインがnpx jestテストを実行すると、次のメッセージが表示されます。 TypeError: Cannot read property 'queryParams' of undefined

私の仕様:

beforeEach(() => {
      TestBed.configureTestingModule({
        ...,
        providers: [
          {
            provide: ActivatedRoute,
            useValue: {
              data: {
                subscribe: (fn: (value: Data) => void) =>
                  fn({
                    pagingParams: {
                      predicate: 'id',
                      reverse: false,
                      page: 0
                    }
                  })
              }
            }
          }
        ]...

it('Should call load all on init', () => {
      // GIVEN
      const headers = new HttpHeaders().append('link', 'link;link');
      spyOn(service, 'query').and.returnValue(
        of(
          new HttpResponse({
            body: [new DataSource(123)],
            headers
          })
        )
      );

      // WHEN
      comp.ngOnInit();

      // THEN
      expect(service.query).toHaveBeenCalled();
      expect(comp.dataSources[0]).toEqual(jasmine.objectContaining({ id: 123 }));
    });

テストはcomp.ngOnInit();機能に失敗します。

プライベート変数、パラメーターとして提供されるactiveRouteはありません。パブリックとプライベートで試しました。

StackOverflow と GitHub Issues の両方を見ると、この問題を修正できませんでした。

どうもありがとうございました!

4

1 に答える 1