Unit testing MutationObserver上的角度指令单元测试失败:参数1不是类型';节点';
我正在为一个指令设置一些单元测试,该指令中有一个MutationObserver,并在每次更改时(当活动routerLink更改时)发出一个事件。它与Angular的ElementRef API配合得很好 我遵循了官方文档和这一伟大的解释:实际上,我可以在测试中获取带有指令的元素:Unit testing MutationObserver上的角度指令单元测试失败:参数1不是类型';节点';,unit-testing,karma-jasmine,angular-directive,angular6,mutation-observers,Unit Testing,Karma Jasmine,Angular Directive,Angular6,Mutation Observers,我正在为一个指令设置一些单元测试,该指令中有一个MutationObserver,并在每次更改时(当活动routerLink更改时)发出一个事件。它与Angular的ElementRef API配合得很好 我遵循了官方文档和这一伟大的解释:实际上,我可以在测试中获取带有指令的元素: describe('ActiveLinkChangeDirective', () => { let component: TestMatExpansionPanelComponent let f
describe('ActiveLinkChangeDirective', () => {
let component: TestMatExpansionPanelComponent
let fixture: ComponentFixture<TestMatExpansionPanelComponent>;
let link
let observed
beforeEach(fakeAsync(() => {
TestBed.configureTestingModule({
imports: [RouterTestingModule],
declarations: [ActiveLinkChangeDirective,
TestMatExpansionPanelComponent],
providers: [
{ provide: ElementRef, useClass: TestMatExpansionPanelComponent }],
schemas: [CUSTOM_ELEMENTS_SCHEMA],
}).compileComponents().then(() => {
fixture = TestBed.createComponent(TestMatExpansionPanelComponent)
component = fixture.debugElement
link = fixture.debugElement.query(By.directive(ActiveLinkChangeDirective))
expect(link).not.toBeNull()
observed = link.injector.get(ActiveLinkChangeDirective)
expect(observed).not.toBeNull()
let observer = new MutationObserver((mutations) => {
mutations.forEach(mutation => console.log(mutation.target))
})
observer.observe(observed, { attributes: true })
fixture.detectChanges();
})
据我所知,这个错误意味着MutationObserver没有要观察的元素,并且没有具体地引用被观察的元素类型。在测试中,我无法将观察到的元素的实例传递给MutationObserver。非常感谢您提供的任何建议。我能够通过包装
观察者来通过测试。请遵循以下方法:
let addObserver = () => {
if (!observed) {
tick(500)
addObserver
return
}
observer.observe(observed, { attributes: true })
}
显然,在异步测试中调用该方法太早了
let addObserver = () => {
if (!observed) {
tick(500)
addObserver
return
}
observer.observe(observed, { attributes: true })
}