[解決済み] Angular2の@Input()を使ったユニットテスト
2023-07-18 14:45:42
質問
コンポーネントで
@Input()
アノテーションを使用するコンポーネントがあります。
openProductPage()
メソッドのユニットテストを書こうとしているのですが、ユニットテストをどのようにセットアップすればいいのか少し迷っています。 I
ができました。
インスタンス変数をpublicにすることもできますが、そんなことをする必要はないと思います。
どのようにJasmineのテストをセットアップすれば、モックされた製品がインジェクションされ(提供され?
openProductPage()
メソッドをテストするにはどうしたらよいでしょうか?
私のコンポーネントです。
import {Component, Input} from "angular2/core";
import {Router} from "angular2/router";
import {Product} from "../models/Product";
@Component({
selector: "product-thumbnail",
templateUrl: "app/components/product-thumbnail/product-thumbnail.html"
})
export class ProductThumbnail {
@Input() private product: Product;
constructor(private router: Router) {
}
public openProductPage() {
let id: string = this.product.id;
this.router.navigate([“ProductPage”, {id: id}]);
}
}
どのように解決するのですか?
いつもはこんな感じです。
describe('ProductThumbnail', ()=> {
it('should work',
injectAsync([ TestComponentBuilder ], (tcb: TestComponentBuilder) => {
return tcb.createAsync(TestCmpWrapper).then(rootCmp => {
let cmpInstance: ProductThumbnail =
<ProductThumbnail>rootCmp.debugElement.children[ 0 ].componentInstance;
expect(cmpInstance.openProductPage()).toBe(/* whatever */)
});
}));
}
@Component({
selector : 'test-cmp',
template : '<product-thumbnail [product]="mockProduct"></product-thumbnail>',
directives: [ ProductThumbnail ]
})
class TestCmpWrapper {
mockProduct = new Product(); //mock your input
}
なお
product
の他のフィールドと
ProductThumbnail
クラス
は
はこのアプローチでプライベートなものになります (少し冗長になりますが、私が Thierry のアプローチよりこの方法を好む主な理由です)。
関連
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] ngModel' は 'input' の既知のプロパティではないため、バインドできません。
-
[解決済み] TDDのためのJavaScriptユニットテストツール
-
[解決済み】典型的なテストディレクトリ構造でunittestを実行する
-
[解決済み] Angular 4+ ngOnDestroy() サービス中 - observableを破壊する
-
[解決済み] Angularでコンポーネントをリフレッシュする方法
-
[解決済み] ExpressionChangedAfterItHasBeenCheckedError: チェックされた後に、式が変更されました。以前の値: 'undefined'
-
[解決済み] Angular - ngForの中のngIfの中のパラメータを持つng-template [重複]。
-
[解決済み] Angular 2でコンポーネントの静的変数をHTMLにバインドする方法は?
-
[解決済み] Angular2のTypescriptで文字列を日付に変換するには?重複
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] ng serve がファイルの変更を自動的に検出しない
-
[解決済み] 角度2 ngfor 最初、最後、インデックスループ
-
[解決済み] 継承と依存性注入
-
[解決済み] Angular v5からAngular v6にプロジェクトをアップグレードしたい。
-
[解決済み] 文字列|ヌル'型の引数は、文字列'型のパラメータに代入できません。タイプ 'null' はタイプ 'string' に割り当てられません。
-
[解決済み] プロパティ 'controls' がタイプ 'AbstractControl' に存在しない Angular 4 [duplicate] 。
-
[解決済み] コンポーネントではなくクラスにサービスをインジェクトする方法
-
[解決済み] Angular : ルートへの手動リダイレクト
-
[解決済み] angularで1つの要素に複数のテンプレートバインディングを適用する方法 [重複].
-
[解決済み] Angular2のTypescriptで文字列を日付に変換するには?重複