Юнит-тестирование угловой / ионной директивы с поставщиками - PullRequest
0 голосов
/ 28 ноября 2018

Я пытаюсь проверить мой 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, даже если массив провайдеров пуст?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...