モジュール内のサービスを別のモジュールのサービスに依存してテストしようとしています。他のモジュールのサービス、コンポーネント...はnpmパッケージを介してアクセスされます。私の会社は、ほとんどがソースコードをウェブに載せることに少し厄介なので、うまくいけば私は助けを得るために十分に投稿しました。角2 - テストのために別のモジュールの依存関係を上書きする方法
私が募集したいサービスは、ユーザー情報を取得し、別のモジュールに存在します。このサービスによって返されるプロパティが定義されていないというエラーが表示されます。 TestBed.overrideModuleを使用して、他のモジュールのプロバイダを作成したモックバージョンに変更しようとしました。私はoverrideModuleのドキュメンテーションを見つけるのに困っています。私は数日間試してみましたが、overrideModulesのいくつかの使用法を見つけても、私が仕事をしたいと思うようにする方法を理解することはできません。どんな助けもありがとう。
エラーが発生したため、正しい依存関係が注入されているかどうかは疑問ですが、実際の確認方法はわかりません。エラースタックのトレースは、webpack:///node_modules/@another-repo/prefs/index.jsに相当します。
コード(あなたは私が私の会社を同定するもの取り除くしようとした質問がある場合は私に知らせてください):私のモジュールに
次のものがあり、これはである
// classa.service.ts
import { Injectable } from '@angular/core';
import { IDModel } from '@another-repo/core';
import { FormatService } from '@another-repo/prefs';
import { MyRepo } from './my-repo.service';
@Injectable()
export class ClassA {
constructor(idModel: IDModel, repo: MyRepo, formats: FormatService) {
}
doSomething() { }
}
// in my module
// my-repo.service.ts
import { Injectable } from '@angular/core';
import { Http, Response } from '@angular/http';
@Injectable()
export class MyRepo {
constructor(private readonly http: Http) {
}
get(id): Observable<any> {
return this.http
.get(api(`${id}`))
.map(response => response.json());
}
}
// my-repo-service.spec.ts
//...
describe('test',() => {
let testService;
beforeEach(async() => {
TestBed.configureTestingModule({
imports: [
HttpModule,
FooModule
],
providers: [
{ provide: RepoToMock1, useClass: MockRepoToMock1 },
MyRepo,
],
});
TestBed.overrideModule(FooModule,
{
remove: {
providers: [RepoToMock1]
},
add: {
providers: [{ provide: RepoToMock1, useClass: MockRepoToMock1 }]
}
});
});
beforeEach(() => {
testService = TestBed.get(MyRepo);
});
//...
});
node_moduleのindex.d.tsファイルは、モジュールFooModuleを呼び出します。
export class IDModel {
id: Observable<number>;
constructor(otherIdRepo: OtherIdRepo, otherType: OtherTypeModel);
}
export class FormatService {
constructor(formatModel: FormatModel, timeService: TimeService, numberService, NumberService);
}
export class FormatModel {
myFormat: Format;
constructor(repo: RepoToMock1);
}
export class Format {
branding: string;
}
export class RepoToMock1 {
constructor(http: Http);
getPrefs(): Observable<Format>;
}
export class TimeService {
constructor(formatModel: FormatModel);
}
export class NumberService {
getNumber();
}
今日これを試して、それが私のために働くなら、ここに報告します。好奇心の中で、工場を使う利点は何ですか? – user2157249
悲しいことに、工場に切り替えることは、モジュールの依存関係を模倣するのには役に立たなかった – user2157249