...Angular 2 Injectorは毎回新しいインスタンス化を行いますか?ユニットテスト私は、インジェクタを呼び出して、このようなHTTPオブジェクトをスパイしていて
beforeEach(async(inject([MyRepository, MockBackend, Http],(myRepository: MyRepository, backend: MockBackend, http : Http) => {
spyOn(http,'get').and.callThrough();
backend.connections.subscribe((conn: MockConnection) => {
const options: ResponseOptions = new ResponseOptions({body: '[{"name":"chris"},{"name":"dave"}]'});
conn.mockRespond(new Response(options));
});
TestBed.compileComponents();
fixture = TestBed.createComponent(MyComponent);
fixture.detectChanges();
})));
しかし、私はこのようなヘルパーメソッドにspyOn
funcionをリファクタリングするとき...
class myTestHelper{
public static spyOnHttp(): void{
inject([Http],(http : Http) => {
spyOn(http, 'get').and.callThrough();
});
}
}
そして...私は次のエラーを取得する(代わりに直接spyOnの)私のテスト・セットアップから私の新しいコードを呼び出す
Error: <toHaveBeenCalledWith> : Expected a spy, but got Function.
新しい注入機能を使用すると、別のhttpオブジェクトが返されるようです。しかし、私は彼らが同じだろうと思った?インジェクタが使用されるたびに新しいものが作成された場合に、どの角度を使用するのかを角がどのように知っているのではないのですか?
だから場合には確実に私は同じへのアクセスを有することになりますテストで1つのコンポーネントしか設定していないので、どこから呼び出すのかに関係なく 'http'引数を使用できますか? – Exitos
同じコンポーネントインスタンスを再利用し、そのコンポーネントでのみ 'Http'を提供する場合は、同じインスタンスを取得する必要があります。 TestBed.createComponent(MyComponent)はテストごとに新しいコンポーネントインスタンスを作成するため、テストごとに新しいコンポーネントインスタンスが作成されます。異なる 'Http'インスタンス。 –