为具有 NgZone 依赖项的组件运行 jasmine 测试 [英] Running jasmine tests for a component with NgZone dependency
问题描述
我将如何继续为以下组件运行 jasmine 测试:
How would I go ahead with running a jasmine test for the following component:
@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 的所有参数:
The following fails with the Can't resolve all parameters for 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();
});
})
使用 Angular 4.1.3.我找到了 MockNgZone 类 @
using Angular 4.1.3. I found the MockNgZone class @ https://no-shadow-angular-io.firebaseapp.com/docs/ts/latest/api/core/testing/MockNgZone-class.html. But it seems unavailable in the @angular/core/testing for this particular version:
有人知道我应该怎么做来测试这个组件吗?
Anybody knows what I should do to test this component?
问候
推荐答案
如果你的问题是关于 runOutsideAngular
因为那你不能使用 async
或 fakeAsync
,您唯一需要模拟的是该函数,并且以下代码运行良好:
If your problem is about runOutsideAngular
because then you cannot use async
or fakeAsync
, the only thing you need to mock is that function and the following works well:
const ngZone = TestBed.get(NgZone);
spyOn(ngZone, 'runOutsideAngular').and.callFake((fn: Function) => fn());
这篇关于为具有 NgZone 依赖项的组件运行 jasmine 测试的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!