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は、すべての依存関係と「他の依存関係の依存関係」をまだ注入していませんか?
説明させてください、私も数年前に同様の質問がありました:
Angular UnitTestingでJasmineSpy Objectを使用する必要があるのはなぜですか?
回答:を作成するとspy
、単体テストで以下のタスクを実行できるようになるためです。
関数が呼び出されたかどうかを確認できます( `expect(component.method).toHaveBeenCalled()を使用して)
実際の実装(内部に記述されているservice.ts
)をオーバーライドし、ダミーデータを返して、単体テストケースのいくつかのシナリオを作成することもできます。
角度ガイドで見ることができるものとは異なり、私がスタブを使用したこの記事を確認してください。を使用して注入するだけで、同じサービスを使用するStubs
他のother-component.spec.ts
サービスを再利用できるため、providers
使用しましたuseClass
。時間をかけて、.toHaveBeenCalled()
[私のポイント1を理解するために]どのように使用したか、また.returnValue()をどのように使用してerror
サービスの動作を再現したかを確認してください。
ValueServiceSpyを作成する必要は何ですか?TestBed.injectは、すべての依存関係と「他の依存関係の依存関係」をまだ注入していませんか?
回答:はい、TestBed.inject
依存関係を注入しましたが、実際のを注入しValueService
ます。単体テストでは、「テストするサービス」を分離する必要があります(この場合、テストするのMasterService
ではなく、テストする必要がありますValueService
)。
だから、それは理にかなっている間テスト。mock
ValueService
MasterService
それは理にかなっていますか ?
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加