测试方法setter@Input()Angular4业力
Test method setter @Input() Angular 4 Karma
如何从组件测试此方法:
@Input() set camera(camera: CameraModel) {
this._camera = camera;
if (this._camera && this._camera.cameraId) {
this.fetchVideos(this._camera);
}
}
测试的时候,需要把我的stub给他,但是我没试过,不行...
信息
如果我在测试中使用 setter 作为方法,我会得到错误 "component.camera is not a function"
TypeError: component.camera is not a function
at Object.eval (webpack:///D:/dev/nighthawk/frontend/src/app/components/dashboard-videos-list/dashboard-videos-list.component.spec.ts?:86:23)
at ZoneDelegate.invoke (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/zone.js?:392:26)
at AsyncTestZoneSpec.onInvoke (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/async-test.js?:49:39)
at ProxyZoneSpec.onInvoke (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/proxy.js?:76:39)
at ZoneDelegate.invoke (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/zone.js?:391:32)
at Zone.runGuarded (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/zone.js?:155:47)
at runInTestZone (webpack:///D:/dev/nighthawk/frontend/~/@angular/core/@angular/core/testing.es5.js?:128:25)
at Object.eval (webpack:///D:/dev/nighthawk/frontend/~/@angular/core/@angular/core/testing.es5.js?:67:13)
at ZoneDelegate.invoke (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/zone.js?:392:26)
at ProxyZoneSpec.onInvoke (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/proxy.js?:79:39)
每个之前测试:
beforeEach(() => {
fixture = TestBed.createComponent(DashboardVideosListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
测试:
describe('set camera', () => {
it('success', async(() => {
component.camera(new CameraModel({
cameraId: 13
}));
expect(component._camera['cameraId']).toBe(13);
}));
});
而不是
component.camera(new CameraModel({
cameraId: 13
}));
你想要
component.camera = new CameraModel({});
因为它是一个输入 setter 每次你给它一个新值时,你并没有真正调用函数更多的函数运行。 (:
如何从组件测试此方法:
@Input() set camera(camera: CameraModel) {
this._camera = camera;
if (this._camera && this._camera.cameraId) {
this.fetchVideos(this._camera);
}
}
测试的时候,需要把我的stub给他,但是我没试过,不行...
信息
如果我在测试中使用 setter 作为方法,我会得到错误 "component.camera is not a function"
TypeError: component.camera is not a function
at Object.eval (webpack:///D:/dev/nighthawk/frontend/src/app/components/dashboard-videos-list/dashboard-videos-list.component.spec.ts?:86:23)
at ZoneDelegate.invoke (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/zone.js?:392:26)
at AsyncTestZoneSpec.onInvoke (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/async-test.js?:49:39)
at ProxyZoneSpec.onInvoke (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/proxy.js?:76:39)
at ZoneDelegate.invoke (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/zone.js?:391:32)
at Zone.runGuarded (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/zone.js?:155:47)
at runInTestZone (webpack:///D:/dev/nighthawk/frontend/~/@angular/core/@angular/core/testing.es5.js?:128:25)
at Object.eval (webpack:///D:/dev/nighthawk/frontend/~/@angular/core/@angular/core/testing.es5.js?:67:13)
at ZoneDelegate.invoke (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/zone.js?:392:26)
at ProxyZoneSpec.onInvoke (webpack:///D:/dev/nighthawk/frontend/~/zone.js/dist/proxy.js?:79:39)
每个之前测试:
beforeEach(() => {
fixture = TestBed.createComponent(DashboardVideosListComponent);
component = fixture.componentInstance;
fixture.detectChanges();
});
测试:
describe('set camera', () => {
it('success', async(() => {
component.camera(new CameraModel({
cameraId: 13
}));
expect(component._camera['cameraId']).toBe(13);
}));
});
而不是
component.camera(new CameraModel({
cameraId: 13
}));
你想要
component.camera = new CameraModel({});
因为它是一个输入 setter 每次你给它一个新值时,你并没有真正调用函数更多的函数运行。 (: