Жасмин: тестовая вложенная функция была вызвана или нет - PullRequest
0 голосов
/ 02 апреля 2019

Я новичок в написании модульного теста,

Ниже приведен мой сервис,

  createComponent(content, type) {
    if (!type) {
      this.redirect();
    }
    this.componentFactory = this.componentFactoryResolver.resolveComponentFactory(type);
    this.componentReference = this.rootViewContainer.createComponent(this.componentFactory);
    this.componentReference.instance.contentOnCreate(content);
  }

  redirect() {
    return this.router.navigate(['/information']);
  }

МОЯ спецификация,

  it('should call createComponent ', () => {
    spyOn(renderEngineService, 'createComponent');
    renderEngineService.setRootViewContainerRef(oneColumnTemplateComponent.view);
    renderEngineService.createComponent(oneColumnTemplateComponent.content, 'HeadingComponent');
    expect(renderEngineService.createComponent).toHaveBeenCalled();
  });
  it('should call redirect ', () => {
    spyOn(renderEngineService, 'createComponent');
    renderEngineService.setRootViewContainerRef(oneColumnTemplateComponent.view);
    renderEngineService.createComponent(oneColumnTemplateComponent.content, 'UndefinedComponent');
    expect(renderEngineService.redirect).toHaveBeenCalled();
  });

Я хотел проверить, если createComponent недопустимо, он должен вызвать метод redirect.

Как это можно сделать?пожалуйста, помогите.

1 Ответ

0 голосов
/ 02 апреля 2019

Я думаю, что у вас есть опечатка во втором тестовом наборе / шпионском определении, я думаю, что вы хотите шпионить за redirect, а не createComponent. Также вы хотите издеваться над вызовом createComponent или просто пропустить его и проверить, был ли он вызван? В зависимости от этого тестовый пример должен быть написан немного по-другому.

В любом случае, я бы изменил это на следующее (если вы не хотите насмехаться над вызовом createComponent):

it('should call createComponent ', () => {
  // add callThrough if you want the actual function to be called, otherwise remove it
  let spy = spyOn(renderEngineService, 'createComponent').and.callThrough();
  renderEngineService.setRootViewContainerRef(oneColumnTemplateComponent.view);
  renderEngineService.createComponent(oneColumnTemplateComponent.content, 'HeadingComponent');
  expect(spy).toHaveBeenCalled();
});

it('should call redirect ', () => {
  // spy on redirect here, not createComponent
  let spy = spyOn(renderEngineService, 'redirect');
  renderEngineService.setRootViewContainerRef(oneColumnTemplateComponent.view);
  // pass null as second argument, otherwise redirect will not be called
  renderEngineService.createComponent(oneColumnTemplateComponent.content, null);
  expect(spy).toHaveBeenCalled();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...