1. ホーム
  2. unit-testing

[解決済み] ActivatedRouteのパラメータに依存するコンポーネントをどのようにユニットテストするか?

2022-10-22 17:32:11

質問

オブジェクトを編集するために使用されるコンポーネントをユニットテストしています。オブジェクトには一意の id があり、これはサービス内でホストされているオブジェクトの配列から特定のオブジェクトを取得するために使用されます。特定の id はルーティングで渡されるパラメータを通じて取得されます。 ActivatedRoute クラスを通して渡されます。

コンストラクタは以下の通りです。

constructor(private _router:Router, private _curRoute:ActivatedRoute, private _session:Session) {}
    
ngOnInit() {
  this._curRoute.params.subscribe(params => {
    this.userId = params['id'];
    this.userObj = this._session.allUsers.filter(user => user.id.toString() === this.userId.toString())[0];

このコンポーネントに対して基本的なユニットテストを実行したいと思います。しかし、どのようにして id パラメータを注入し、コンポーネント が必要です。 このパラメータが必要です。

ちなみに:すでにモックには Session のサービスなので、心配はありません。

どのように解決するのですか?

最もシンプルな方法は、単に useValue 属性に、モックにしたい値のObservableを指定します。

RxJS < 6

import { Observable } from 'rxjs/Observable';
import 'rxjs/add/observable/of';
...
{
  provide: ActivatedRoute,
  useValue: {
    params: Observable.of({id: 123})
  }
}

RxJS >= 6

import { of } from 'rxjs';
...
{
  provide: ActivatedRoute,
  useValue: {
    params: of({id: 123})
  }
}