Angular UnitTestingでJasmineSpy Objectを使用する必要があるのはなぜですか?

avdeveloper

Jasmin / Karmaを使用したAngularユニットテストに関する質問があります。

私は以下の3つのサービスを持っています:EmployeeService、SalaryService、TaxationService。

EmployeeServiceは、コンストラクターに挿入されるSalaryServiceに依存します。

SalaryServiceは、コンストラクターに再度挿入されるTaxationサービスに依存します。

私のemployee.component.spec.tsには、次のコードがあります。

let employeeService: EmployeeService;
let salaryServiceSpy: jasmine.SpyObj<SalaryService>;

TestBed.configureTestingModule({
 providers: [EmployeeService],
 declarations: [ EmployeeComponent ]
})
.compileComponents();
  employeeService = TestBed.inject(EmployeeService);
  salaryServiceSpy = TestBed.inject(SalaryService) as jasmine.SpyObj<SalaryService>;
}));

it('should return Name and Salary', () => {
  expect(employeeService.getEmployeeNameAndSalary(1)).toBe("John Smith receives: $12345 and tax value of 15%");
});

コードは正常に機能します。私の質問は、なぜJasmine Spyを使用する必要があるのか​​ということです。コードはスパイサービスがなくても正常に機能しますか?

 salaryServiceSpy = TestBed.inject(SalaryService) as jasmine.SpyObj<SalaryService>;

以下を参照として使用しました:https//angular.io/guide/testing-services

以下の例がより明確である場合、ValueServiceSpyを作成する必要は何ですか?TestBed.injectは、すべての依存関係と「他の依存関係の依存関係」をまだ注入していませんか?

ここに画像の説明を入力してください

Shashank vivek

説明させてください、私も数年前に同様の質問がありました:

Angular UnitTestingでJasmineSpy Objectを使用する必要があるのはなぜですか?

回答:を作成するとspy、単体テストで以下のタスクを実行できるようになるためです。

  1. 関数が呼び出されたかどうかを確認できます( `expect(component.method).toHaveBeenCalled()を使用して)

  2. 実際の実装(内部に記述されているservice.ts)をオーバーライドし、ダミーデータを返して、単体テストケースのいくつかのシナリオを作成することもできます

角度ガイドで見ることができるものとは異なり、私がスタブを使用したこの記事を確認してください。を使用注入するだけで、同じサービスを使用するStubs他のother-component.spec.tsサービスを再利用できるためproviders使用しましたuseClass時間をかけて、.toHaveBeenCalled()[私のポイント1を理解するために]どのように使用したか、また.returnValue()どのように使用してerrorサービス動作を再現したかを確認してください


ValueServiceSpyを作成する必要は何ですか?TestBed.injectは、すべての依存関係と「他の依存関係の依存関係」をまだ注入していませんか?

回答:はい、TestBed.inject依存関係を注入しましたが、実際のを注入しValueServiceます。単体テストでは、「テストするサービス」を分離する必要がありますこの場合、テストするのMasterServiceではなく、テストする必要がありますValueService)。

だから、それは理にかなっている間テストmockValueServiceMasterService


それは理にかなっていますか ?

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Angularでng-srcを使用するときに、式を使用する必要があるのはなぜですか?

分類Dev

Angularでは、なぜ$ scopeで常にオブジェクトを使用する必要があるのですか?

分類Dev

工場でangular.copyを使用する必要があるのはなぜですか?

分類Dev

AngularでObject.keysを取得するために、ComponentにObject = Objectを記述する必要があるのはなぜですか?

分類Dev

Angularで、構成の前にプロバイダーを宣言する必要があるのはなぜですか?

分類Dev

Meteorを使用する場合、なぜAngularが必要なのですか?

分類Dev

AngularがHttpClientにObservableを使用するのはなぜですか?

分類Dev

AngularがHttpClientにObservableを使用するのはなぜですか?

分類Dev

いつ&なぜangular4で依存性注入トークンを使用する必要があるのか

分類Dev

AngularCLIの依存関係-使用しないのに@angular / routerをインストールする必要があるのはなぜですか?

分類Dev

AngularCLIの依存関係-使用しないのに@angular / routerをインストールする必要があるのはなぜですか?

分類Dev

[Angular、Jersey]ジャージを使用して$ httpでアプリケーション名を指定する必要があるのはなぜですか

分類Dev

Angularのイベントバインディングに「$ event」キーワードを使用する必要があるのはなぜですか?(出力用)

分類Dev

AngularのsubjectSubscriptionからデータを取得するためにページをリロードする必要があるのはなぜですか?

分類Dev

SerializeFieldを使用する必要があるのはなぜですか?

分類Dev

SerializeFieldを使用する必要があるのはなぜですか?

分類Dev

chrootを使用する必要があるのはなぜですか

分類Dev

Angularで変更検出をトリガーするためにmarkForCheck()を追加する必要があるのはなぜですか?

分類Dev

Angular 2-カスタム検証を使用する場合、なぜngFormを使用する必要があるのですか?

分類Dev

AngularでControlValueAccessorを実装するときに、writeValueでonChangeとonTouchを呼び出す必要があるのはなぜですか?

分類Dev

新しいAngular2プロジェクトを作成するたびにnpminstallを実行する必要があるのはなぜですか?

分類Dev

ビューをbreezejsでAngular2に更新するには、なぜNgZone.runを呼び出す必要があるのですか?

分類Dev

Angularが宣言配列とentryComponents配列で動的コンポーネントを宣言する必要があるのはなぜですか?

分類Dev

Angular 2配列がリストからアイテムを削除せず、リロードする必要があるのはなぜですか?

分類Dev

Angular / rxjs:toPromiseをインポートする必要がなくなったのはなぜですか?

分類Dev

遅延ロードされたモジュールがcommonModuleをインポートする必要があるのはなぜですか?Angular 2

分類Dev

object.freezeではなくimmutablejsを使用する必要があるのはなぜですか?

分類Dev

AngularでrouterLinkの代わりにhrefを使用する必要があるのはいつですか?

分類Dev

Fortranで「使用のみ」を使用する必要があるのはなぜですか

Related 関連記事

  1. 1

    Angularでng-srcを使用するときに、式を使用する必要があるのはなぜですか?

  2. 2

    Angularでは、なぜ$ scopeで常にオブジェクトを使用する必要があるのですか?

  3. 3

    工場でangular.copyを使用する必要があるのはなぜですか?

  4. 4

    AngularでObject.keysを取得するために、ComponentにObject = Objectを記述する必要があるのはなぜですか?

  5. 5

    Angularで、構成の前にプロバイダーを宣言する必要があるのはなぜですか?

  6. 6

    Meteorを使用する場合、なぜAngularが必要なのですか?

  7. 7

    AngularがHttpClientにObservableを使用するのはなぜですか?

  8. 8

    AngularがHttpClientにObservableを使用するのはなぜですか?

  9. 9

    いつ&なぜangular4で依存性注入トークンを使用する必要があるのか

  10. 10

    AngularCLIの依存関係-使用しないのに@angular / routerをインストールする必要があるのはなぜですか?

  11. 11

    AngularCLIの依存関係-使用しないのに@angular / routerをインストールする必要があるのはなぜですか?

  12. 12

    [Angular、Jersey]ジャージを使用して$ httpでアプリケーション名を指定する必要があるのはなぜですか

  13. 13

    Angularのイベントバインディングに「$ event」キーワードを使用する必要があるのはなぜですか?(出力用)

  14. 14

    AngularのsubjectSubscriptionからデータを取得するためにページをリロードする必要があるのはなぜですか?

  15. 15

    SerializeFieldを使用する必要があるのはなぜですか?

  16. 16

    SerializeFieldを使用する必要があるのはなぜですか?

  17. 17

    chrootを使用する必要があるのはなぜですか

  18. 18

    Angularで変更検出をトリガーするためにmarkForCheck()を追加する必要があるのはなぜですか?

  19. 19

    Angular 2-カスタム検証を使用する場合、なぜngFormを使用する必要があるのですか?

  20. 20

    AngularでControlValueAccessorを実装するときに、writeValueでonChangeとonTouchを呼び出す必要があるのはなぜですか?

  21. 21

    新しいAngular2プロジェクトを作成するたびにnpminstallを実行する必要があるのはなぜですか?

  22. 22

    ビューをbreezejsでAngular2に更新するには、なぜNgZone.runを呼び出す必要があるのですか?

  23. 23

    Angularが宣言配列とentryComponents配列で動的コンポーネントを宣言する必要があるのはなぜですか?

  24. 24

    Angular 2配列がリストからアイテムを削除せず、リロードする必要があるのはなぜですか?

  25. 25

    Angular / rxjs:toPromiseをインポートする必要がなくなったのはなぜですか?

  26. 26

    遅延ロードされたモジュールがcommonModuleをインポートする必要があるのはなぜですか?Angular 2

  27. 27

    object.freezeではなくimmutablejsを使用する必要があるのはなぜですか?

  28. 28

    AngularでrouterLinkの代わりにhrefを使用する必要があるのはいつですか?

  29. 29

    Fortranで「使用のみ」を使用する必要があるのはなぜですか

ホットタグ

アーカイブ