Я пытаюсь написать модульный тест it('should toggle menu', () => {})
, но мне сложно получить доступ к свойствам директивы, содержащей метод переключения.
У меня есть компонент многократного использования, состоящий из нескольких компонентов / директив
ToggleComponent
ToggleDirective
ToggleMenuDirective
Это мой ToggleDirective:
export class ToggleDirective implements OnInit {
@HostBinding('class.toggler-toggle') toggleClass = true;
toggle: boolean;
visible = false;
constructor(private toggler: ToggleService, private el: ElementRef) { }
ngOnInit(): void {
this.toggler.nowToggle.subscribe(toggle => this.toggle = toggle);
}
@HostListener('document:click', ['$event'])
onVoidClick(): void {
this.visible = this.el.nativeElement.contains(event.target) ? !this.visible : false;
this.toggler.setToggleState(this.visible);
}
}
При написании модульного теста Я использую шаблон макета.
Как получить доступ к / проверить методы в ToggleDirective при использовании макета шаблона, подобного этому:
import { Component } from '@angular/core';
import { TestBed } from '@angular/core/testing';
import { By } from '@angular/platform-browser';
import { TogglerModule } from './toggler.module';
@Component({
template: `
<toggler>
<toggler-toggle>Toggle</toggler-toggle>
<toggler-menu>
<toggler-item>Sample Item 1</toggler-item>
</toggler-menu>
</toggler>`,
})
class TestComponent {}
describe('TogglerComponent', () => {
beforeEach(() => {
TestBed.configureTestingModule({
imports: [TogglerModule],
declarations: [TestComponent],
})
.compileComponents();
});
it('should create toggler', () => {
expect(TestBed.createComponent(TestComponent).componentInstance).toBeTruthy();
});
it('should toggle menu', () => {
const fixture = TestBed.createComponent(TestComponent);
const component = fixture.componentInstance;
expect(component.visible).toBeFalsy();
component.onVoidClick();
expect(component.visible).toBeTruthy();
});
});