他のサービスとのサービスを依存関係としてテストするための正しいソリューションを見つけることができません。私がテストしているサービスは、タスクのリストを返す別のサービスでgetterメソッドを呼び出します。サービス依存関係のあるサービスのテスト
サービステスト:
export class TasksData {
public tasks = [];
public tasksData = [
{
'form': 'setup-device',
'type': 'register-device',
'text': 'Register Device',
'icon': 'mdi-cellphone-link',
'status': ''
},
{
'form': 'setup-eula',
'type': 'confirm-eula',
'text': 'Agree to EULA',
'icon': 'mdi-pen',
'status': ''
},
{
'form': 'setup-change-password',
'type': 'change-password',
'text': 'Change Password',
'icon': 'mdi-lock-reset',
'status': ''
},
{
'form': 'setup-profile',
'type': 'register-profile',
'text': 'Register Profile',
'icon': 'mdi-account-plus',
'status': ''
}
];
constructor(private setupManager: SetupManagerService) {}
public getter() {
let data = [];
this.tasks = this.setupManager.getter();
data = this.tasksData.filter((task) => {
return (this.tasks.indexOf(task.type)) !== -1;
});
return data;
}
}
依存関係サービス:
export class SetupManagerService {
private message: string;
private redirect = '';
private tasks: any = [];
private clone: any = [];
private user: Object = {};
public taskChange = new Subject();
constructor(
private closeModal: CloseModalService,
private pubsub: Pubsub,
private reloadStatus: ReloadStatusService,
private router: Router,
private storage: HTML5Storage
) {}
// ===== Removed code for brevity ===== //
public getter() {
return this.clone;
}
}
テスト:これは私がテストしていたサービスです
import { TestBed } from '@angular/core/testing';
// Test Case:
import { TasksData } from '../tasks-data.service';
// Dependencies:
import { SetupManagerService } from '../setup-manager.service';
let ds = [{
'form': 'setup-device',
'type': 'register-device',
'text': 'Register Device',
'icon': 'mdi-cellphone-link',
'status': ''
}];
class SetupManagerServiceStub {
getter() {
return ['register-device'];
}
}
fdescribe('Service TaskData',() => {
let subject = TasksData;
let setupManager;
beforeEach(() => {
TestBed.configureTestingModule({
providers: [
TasksData,
{ provide: SetupManagerService, useClass: SetupManagerServiceStub }
]
});
subject = TestBed.get(TasksData);
setupManager = TestBed.get(SetupManagerService);
});
it('should create an instance',() => {
expect(subject).toBeDefined();
});
it('should... ',() => {
expect(subject.getter()).toEqual(ds);
});
});
私はこのオンラインを行う方法のさまざまな例を試してみましたが、それらが原因最終リリースに先立って角度の変化にもはや有効であるため、それらのほとんどはおそらく、動作しません。
TasksDataサービスには、依存関係としてSetupManagerServiceがあります。ですから、すべてのSetupManagerServiceの依存関係を追加する必要を避けるために、getterメソッドでスタブクラスを作成し、TaskDataサービスをテストするのに必要な期待値に戻しました。これもこれを行うには正しい方法であれば、すべての
まず私はわかりません。 Angular's Test Docsには、TestBed Moduleを使用してサービス依存関係のあるサービスをテストする方法の例はありません。これは、一日の試した結果、私の最高の仕事の結果です。
これが正しいかどうかについて私の質問は私の問題の一部です。もう一つの問題はTypescriptが私のしたことに不満を持ち、私はこれを解決する方法を見つけていないということです。
そして、私のエディタでこの醜い赤い下線警告:
かなり面白いコメントでなければなりません。私は、ほとんどの開発者がドキュメントを読んでフレームワークを使う方法を学ぶことはかなり確信しています。上で述べたように、TestBedを使ってサービス依存関係のあるサービスをテストすることはできませんでした。これは学習する場所であると考えられているので、あなたはおそらくそれを避けるために建設的な何かを持っていない場合。 – Aaron