他の投稿で同じエラーを見たことがありますが、うまくいきませんでした。
URL から queryParam を読み取る必要がある Angular コンポーネントがあります。たとえば、http://localhost:4200/sample-page?page=3
3 という数字をコンポーネントのローカル変数に格納したい場合などです。
/**
* 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 の両方を見ると、この問題を修正できませんでした。
どうもありがとうございました!