Как исправить проблему модульного теста, связанную с ngx-swiper-wrapper - PullRequest
0 голосов
/ 04 мая 2018

вот мой контекст, проект angular5, библиотека ngx-swiper-wrapper, жасмин и карма. Я пишу модульные тесты для моего компонента, но у меня проблема в моем модульном тесте:

TypeError: undefined не является объектом (оценка 'this.swiperComponentRef.directiveRef') ngAfterViewInit @ http://localhost:8011/_karma_webpack_/main.bundle.js:3642:31382 callProviderLifecycles ...

Это мой модульный тест :

import { async, ComponentFixture, TestBed } from '@angular/core/testing';
import { CUSTOM_ELEMENTS_SCHEMA } from '@angular/core';
import { ExperienceModalComponent } from './experience.modal';
import { SwiperModule, SWIPER_CONFIG, SwiperComponent, SwiperDirective } from 'ngx-swiper-wrapper';
import { DEFAULT_SWIPER_CONFIG } from '../../../config/swiper';

describe('MyComponent', () => {
  let component: MyComponent;
  let fixture: ComponentFixture<MyComponent>;

  beforeEach(async(() => {
    TestBed.configureTestingModule({
      imports: [SwiperModule],
      declarations: [MyComponent],
      providers: [
        { provide: SWIPER_CONFIG, useValue: DEFAULT_SWIPER_CONFIG }
      ],
      schemas: [CUSTOM_ELEMENTS_SCHEMA]
    })
      .compileComponents();
  }));

  beforeEach(() => {
    fixture = TestBed.createComponent(MyComponent);
    component.swiperComponentRef = <any>{
      directiveRef: {
        update: jasmine.createSpy('update'),
        nextSlide: jasmine.createSpy('nextSlide')
      }
    };

    fixture.detectChanges();
  });


  describe('#constructor', () => {
    it('should create', () => {
      expect(component).toBeTruthy();
    });
  });
});

А это мой компонент :

import { Component, Input, ViewChild,  AfterViewInit } from '@angular/core';
import { SwiperComponent, SwiperConfigInterface } from 'ngx-swiper-wrapper';

@Component({
  selector: 'app-my-content',
  templateUrl: './my-component.html',
  styleUrls: ['./my-component.scss']
})
export class MyComponent implements AfterViewInit  {
  public swiperConfig: SwiperConfigInterface = {
    keyboard: false,
    mousewheel: false,
    scrollbar: false,
    navigation: false,
    pagination: false,
    autoplay: false
  };
  @ViewChild(SwiperComponent) swiperComponentRef: SwiperComponent;

  constructor() {
  }

  ngAfterViewInit(): void {
    this.swiperComponentRef.directiveRef.update();
  }
}

Кажется, что в fixture.detectChanges (), когда происходит жизненный цикл компонента, что-то не работает должным образом, и по какой-то причине swiperComponentRef больше не является тем, чем он должен быть. Любые предложения, как исправить тест? Спасибо

...