组件定义:
export class NoteComponent {
constructor(elementRef: ElementRef,
renderer: Renderer,
_alertService: AlertService) {
}
ngAfterViewInit() {
//Hiding the toolbar when editable by default.
this.renderer.setElementStyle(this.elementRef.nativeElement.children[0].children[2].children[0], 'display', 'none');
}
}
测试
describe('NoteComponent (external template)', () => {
let comp: NoteComponent;
let fixture: ComponentFixture<NoteComponent>;
let de: DebugElement;
let el: HTMLElement;
let rendererMock = jasmine.createSpyObj('rendererMock', ['selectRootElement',
'createElement',
'createViewRoot',
'createText',
'setElementProperty',
'setElementAttribute',
'setText',
'setBindingDebugInfo',
'createTemplateAnchor',
'projectNodes',
'attachViewAfter',
'detachView',
'destroyView',
'listen',
'listenGlobal',
'setElementClass',
'setElementStyle',
'invokeElementMethod',
'animate']);
let rootRendererMock = {
renderComponent: () => {
return rendererMock;
}
};
beforeEach(async () => {
TestBed.configureTestingModule({
declarations: [
NoteComponent,
SafePipe], // declare the test component
providers: [AlertService,
{ provide: Renderer, useValue: rootRendererMock }]
})
.overrideComponent(NoteComponent, {
set: {
providers: [
{ provide: Renderer, useValue: rootRendererMock }
]
}
});
TestBed.compileComponents();
});
beforeEach(() => {
fixture = TestBed.createComponent(NoteComponent);
comp = fixture.componentInstance;
});
it('note: note not on favorite page, not faved', async () => {
comp.pinnedOnFavWall = false;
fixture.detectChanges();
de = fixture.debugElement.query(By.css('.favorite'));
expect(de).toBeDefined();
});
测试通过,因为它是异步的,但我在控制台中收到此错误:
TypeError:无法读取DomRenderer.webpackJsonp中未定义的属性'style'... / .. / .. / platform-browser / src / dom / dom_renderer.js.DomRenderer.setElementStyle(http:// localhost:9876 / karma_webpack /webpack:/C:/Shilpa/Work/Freelancing/ArugamBay/Code/ArugambaySite2/src/Arugambay.Web/~/@angular/platform-browser/src/dom/dom_renderer.js:395:1)在DebugDomRenderer.webpackJsonp ... / .. / .. / core / src / debug / debug_renderer.js.DebugDomRenderer.setElementStyle(http:// localhost:9876 / karma_webpack / webpack:/ C:/ Shilpa / Work / Freelancing / ArugamBay / Code / ArugambaySite2 /src/Arugambay.Web/~/@angular/core/src/debug/debug_renderer.js:223:1)在NoteComponent.ngAfterViewInit(http:// localhost:9876 / karma_webpack / webpack:/ C:/ Shilpa / CompiledTemplate.proxyViewClass.View_NoteComponent_Host0.detectChangesInternal(/ DynamicTestModule / NoteComponent /)中的Work / Freelancing / ArugamBay / Code / ArugambaySite2 / src / Arugambay.Web / Scripts / app / components / controls / Note / note.component.ts:67:23) host.ngfactory.js:32:72)在CompiledTempl ate.proxyViewClass.webpackJsonp ... / .. / .. / core / src / linker / view.js.AppView.detectChanges(http:// localhost:9876 / karma_webpack / webpack:/ C:/ Shilpa / Work / Freelancing /ArugamBay/Code/ArugambaySite2/src/Arugambay.Web/~/angular/core/src/linker/view.js:425:1)在CompiledTemplate.proxyViewClass.webpackJsonp ... / .. / .. / core / src / linker / view.js.DebugAppView.detectChanges(http:// localhost:9876 / karma_webpack / webpack:/ C:/Shilpa/Work/Freelancing/ArugamBay/Code/ArugambaySite2/src/Arugambay.Web/~/@angular /core/src/linker/view.js:620:1)在ViewRef_.webpackJsonp ... / .. / .. / core / src / linker / view_ref.js.ViewRef_.detectChanges(http:// localhost:9876)在ComponentFixture._tick的/karma_webpack/webpack:/C:/Shilpa/Work/Freelancing/ArugamBay/Code/ArugambaySite2/src/Arugambay.Web/~/angular/core/src/linker/view_ref.js:181:1) (HTTP://本地主机:9876 / karma_webpack /的WebPack:/ C:/Shilpa/Work/Freelancing/ArugamBay/Code/ArugambaySite2/src/Arugambay.Web/~/@angular/core/bundles/core-testing.umd . js:191:1)在http:// localhost:9在ZoneDelegate的876 / karma_webpack / webpack:/ C:/Shilpa/Work/Freelancing/ArugamBay/Code/ArugambaySite2/src/Arugambay.Web/~/angular/core/bundles/core-testing.umd.js:205:46 .invoke(http:// localhost:9876 / base / node_modules / zone.js / dist / zone.js:365:26)在ProxyZoneSpec.webpackJsonp ... / .. / .. / .. / zone.js / dist / proxy.js.ProxyZoneSpec.onInvoke(http:// localhost:9876 / karma_webpack / webpack:/ C:/Shilpa/Work/Freelancing/ArugamBay/Code/ArugambaySite2/src/Arugambay.Web/~/zone.js/在Object.onInvoke(http:// localhost:9876 / karma_webpack / webpack:/ C:/Shilpa/Work/Freelancing/ArugamBay/Code/ArugambaySite2/src/Arugambay.Web/~/angular/core/src/zone/ng_zone.js:271:1)at Zone.run上的ZoneDelegate.invoke(http:// localhost:9876 / base / node_modules / zone.js / dist / zone.js:364:32)(http:// localhost:9876 / base / node_modules / zone.js) /dist/zone.js:125:43)
我该如何摆脱这个错误?即使没有模拟,我也会得到同样的错误 .
PS:为简洁起见,编辑了组件代码 . 因此,堆栈中的行号可能不匹配 .