Я пытаюсь проверить мой SwingDirective
.
@Directive({
selector: '[swing]'
})
export class SwingDirective {
constructor(private domCtrl: DomController, private renderer: Renderer2, public element: ElementRef ) {
}
}
Мой TestBed
выглядит следующим образом
let RendererMock = jasmine.createSpy("renderer");
let ElemRefMock = jasmine.createSpy("elemRef");
let DomControllerMock = jasmine.createSpy("domCtrl");
@Component({
template: ` <div class="stack" swing [positionChange]="positionChange" >
</div>
`
})
class TestComponent { }
describe('Component: Root Component', () => {
beforeEach(async(() => {
TestBed.configureTestingModule({
declarations: [SwingDirective,TestComponent],
providers: [
{provide: Renderer2, useValue: RendererMock },
{provide: ElementRef, useValue: { nativeElement: "element" }},
{provide: DomController, useValue: DomControllerMock }
],
imports: [
IonicModule.forRoot(TestComponent)
]
}).compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(TestComponent);
comp = fixture.componentInstance;
directive = fixture.debugElement.query(By.directive(SwingDirective)).injector.get(SwingDirective);
});
})
Я создал TestComponent
, который высмеивает мой настоящий компонент с помощьюswing
селектор.Я высмеял провайдеров, требуемых директивой в массиве ngModule
provider.Мои тесты работают без ошибок, но не так, как ожидалось.Когда я console.log(directive.element)
регистрирует экземпляр ElementRef
, а не { nativeElement: "element" }}
, который я предоставил.
На самом деле, если я удаляю всех провайдеров и пропускаю пустой массив, он все еще работает, и провайдеры Angular автоматически вводятся.Как это происходит?Как происходит DI, даже если массив провайдеров пуст?