次のコンポーネントのジャスミンテストを実行するにはどうすればよいですか。
@Component({
moduleId: module.id,
selector: "testComp",
template: "<div>{{value}}</div>",
})
export class TestComp {
public value: string = "This is me";
constructor(public zone: NgZone) {
this.zone.run(() => console.log("zone is here"));
}
}
以下は、NgZoneのすべてのパラメーターを解決できないで失敗します。
describe("test", () => {
let fixture;
let component;
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [TestComp],
schemas: [NO_ERRORS_SCHEMA],
providers: [NgZone]
}).compileComponents;
}));
beforeEach(() => {
fixture = TestBed.createComponent(TestComp);
component = fixture.debugElement.componentInstance;
});
it("should check that the component is created", () => {
expect(component).toBeTruthy();
});
})
using Angular4.1.3。MockNgZoneクラスを@ https://no-shadow-angular-io.firebaseapp.com/docs/ts/latest/api/core /testing/MockNgZone-class.html 。しかし、この特定のバージョンの@ angular/core/testsでは利用できないようです:
このコンポーネントをテストするために私が何をすべきか知っている人はいますか?
よろしく
問題がrunOutsideAngular
に関するものである場合、async
またはfakeAsync
を使用できないため、モックする必要があるのはその関数だけであり、以下が適切に機能します。
const ngZone = TestBed.get(NgZone);
spyOn(ngZone, 'runOutsideAngular').and.callFake((fn: Function) => fn());
少し謎です。 MockNgZone はまだソースにありますが、パブリックAPIから削除されています。
モックrun()の単純な実装を考えると
export class MockNgZone extends NgZone {
...
run(fn: Function): any { return fn(); }
私はこれを使ってあなたをこぶを乗り越えます
const mockNgZone = jasmine.createSpyObj('mockNgZone', ['run', 'runOutsideAngular']);
mockNgZone.run.and.callFake(fn => fn());
TestBed.configureTestingModule({
...
providers: [
{ provide: NgZone, useValue: mockNgZone },
]
Angular 5.2.4(Angular CLI 1.6.8経由でインストール))では、モックがコードベースから削除されたため、Jasmineで使用する必要はありません。プロバイダーリストでのNgZoneの宣言をスキップします。
まったく同じ問題がありました。最後に、ngZoneをそのままにして、使用するコールバックをテストするようにします。
beforeEach(async(() => {
TestBed.configureTestingModule({
...
providers: [NgZone]
})
}));
そして、次のようなngZoneを使用したコードの場合
zone.run(someFunction)
単体テストでsomeFunction
のテストカバレッジが良好であることを確認しました。