Как Жасмин может использовать супер-конструктор FormGroup при вызове в ngOnInit? - PullRequest
0 голосов
/ 29 октября 2018

Я определил свой собственный класс формы, который расширяет FormGroup следующим конструктором:

public constructor(/* params */) {
    function myValidator(): ValidatorFn {
      //return validator function
    }

    super({ /* controls */}, [myValidator()]);
  }

Когда я запускаю свое приложение, оно работает, однако, когда я запускаю для него модульный тест, оно ломается над супер-конструктором, и я получаю следующее сообщение об ошибке:

TypeError: конструктор класса FormGroup не может быть вызван без 'new'

Он построен в моей функции ngOnInit компонента, например:

ngOnInit() {
    this.myForm = new MyForm(/* args */);
    //call service
  }

Мой файл спецификаций:

let component: MyComponent;
let fixture: ComponentFixture<MyComponent>;

const myArray = ['object'];
let myServiceMock: any;
let getCallSpy: any;

describe('ErdwwLoggingComponent', () => {

  beforeEach(async(() => {
    myServiceMock = jasmine.createSpyObj('MyService', ['getCall']);
    getCallSpy = myService.getCall.and.returnValue( of(myArray) );

    TestBed.configureTestingModule({
      declarations: [
        MyComponent
      ],
      providers: [
        { provide: MyService, useValue: myServiceMock }
      ]
    });

    TestBed.overrideComponent(MyComponent, {
      remove: {
        templateUrl: './my.component.html'
      },
      add: {
        template: '<div>test</div>'
      }
    });

    TestBed.compileComponents().then(() => {
      fixture = TestBed.createComponent(MyComponent);
      component = fixture.componentInstance;
    });
  }));

  //succeeds
  it('should have spies defined', () => {
    expect(myServiceMock.getCall).toBeDefined('myServiceMock.getCall not defined');
    expect(getCallSpy).toBeDefined('getCallSpy not defined');
  });

  describe('initialisation', () => {
    //succeeds
    it('should be defined', () => {
      expect(component).toBeDefined();
    });

    //fails
    it('should call getCall', () => {
      // I also tried explicitly calling component.ngOnInit();
      fixture.detectChanges(); // onInit()

      expect(myServiceMock.getCall).toHaveBeenCalled();
    });
  });
});

1 Ответ

0 голосов
/ 29 октября 2018

Проблема была в моем файле tsconfig.spec.json.

В compilerOptions у меня было "target": "es5", когда я удалил это, я больше не получаю ошибку.

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