子コンポーネントのモック化 - Angular 2
2023-08-04 22:18:04
質問
テスト時に子コンポーネントをモックする方法は?親コンポーネントである
product-selected
という親コンポーネントがあり、そのテンプレートは以下のようなものです。
<section id="selected-container" class="container-fluid">
<hr/>
<product-settings></product-settings>
<product-editor></product-editor>
<product-options></product-options>
</section>
そして、コンポーネント宣言は次のようになります。
import { Component, Input } from '@angular/core';
import { ProductSettingsComponent } from '../settings/product-settings.component';
import { ProductEditorComponent } from '../editor/product-editor.component';
import { ProductOptionsComponent } from '../options/product-options.component';
@Component({
selector: 'product-selected',
templateUrl: './product-selected.component.html',
styleUrls: ['./product-selected.component.scss']
})
export class ProductSelectedComponent {}
このコンポーネントは、実際には他のコンポーネントが住むための場所であり、おそらく他の機能は含まれないでしょう。
しかし、テストをセットアップすると、次のようなテンプレートエラーが発生し、3つのコンポーネントすべてで繰り返されます。
Error: Template parse errors:
'product-editor' is not a known element:
1. If 'product-editor' is an Angular component, then verify that it is part of this module.
2. If 'product-editor' is a Web Component then add "CUSTOM_ELEMENTS_SCHEMA" to the '@NgModule.schemas' of this component to suppress this message. ("
<hr/>
<product-settings></product-settings>
[ERROR ->]<product-editor></product-editor>
子コンポーネントのモック版をロードしようとしましたが、どうすればいいかわかりません。私が見た例では、親コンポーネントをオーバーライドするだけで、子コンポーネントについては触れていません。どのようにすればよいのでしょうか。
どのように解決するのですか?
について注意すること
NO_ERRORS_SCHEMA
. 同じthe docsの別の部分を引用してみましょう。
NO_ERRORS_SCHEMA による浅いコンポーネントテストは、複雑なテンプレートのユニットテストを非常に単純化します。しかし、コンパイラはスペルミスやコンポーネントやディレクティブの誤用などの間違いを警告しなくなりました。
私はその欠点が、テストを書く目的にかなり反していると思います。基本的なコンポーネントをモックするのはそれほど難しくないので、なおさらです。
ここではまだ言及されていないアプローチとして、単純に設定時に宣言する方法があります。
@Component({
selector: 'product-settings',
template: '<p>Mock Product Settings Component</p>'
})
class MockProductSettingsComponent {}
@Component({
selector: 'product-editor',
template: '<p>Mock Product Editor Component</p>'
})
class MockProductEditorComponent {}
... // third one
beforeEach(() => {
TestBed.configureTestingModule({
declarations: [
ProductSelectedComponent,
MockProductSettingsComponent,
MockProductEditorComponent,
// ... third one
],
providers: [/* your providers */]
});
// ... carry on
});
関連
-
[解決済み] Angular 2の@ViewChildアノテーションがundefinedを返す
-
[解決済み] Angular 2の「コンポーネント」は既知の要素ではありません。
-
[解決済み] Angular HTMLバインディング
-
[解決済み】親コンポーネントのCSSファイルから子コンポーネントのスタイルを設定する方法は?
-
[解決済み] エラーが発生しました。出力が初期化されていません
-
[解決済み] ルーターアウトレットの子コンポーネントへのデータの渡し方
-
[解決済み] 子ルートから親ルートに移動するにはどうしたらいいですか?
-
[解決済み] ExpressionChangedAfterItHasBeenCheckedError: チェックされた後に、式が変更されました。以前の値: 'undefined'
-
[解決済み] コンストラクタ注入を行わずにサービスのインスタンスを取得する
-
[解決済み] 角度換算2
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Angular 4/5/6 グローバル変数
-
[解決済み] Angular 2: 反応するフォームコントロールの反復処理
-
[解決済み] 角度2 ngfor 最初、最後、インデックスループ
-
[解決済み] ルーターナビゲートで同じページのngOnInitを呼び出さない
-
[解決済み] angular4 / typescriptでdocument.getElementByIdの置き換え?
-
[解決済み] プロパティ 'controls' がタイプ 'AbstractControl' に存在しない Angular 4 [duplicate] 。
-
[解決済み] Angular2のテーブル行をコンポーネント化
-
[解決済み] Angular - ngForの中のngIfの中のパラメータを持つng-template [重複]。
-
[解決済み] ActivatedRoute(paramsなど)のobservableの購読を解除しなければならないのでしょうか?
-
[解決済み] Angular2で複数のルートパラメータを渡す