Angular Jasmin ObjectSpy не является функцией - PullRequest
0 голосов
/ 18 мая 2019

Я пытаюсь шпионить за сервисом, когда он вызывается в любом тесте, поэтому создайте макет:

import { SpyObject } from './spyobject';
import { TranslateService } from '@ngx-translate/core';

export class MockTranslateService extends SpyObject {

  constructor() {
    super(TranslateService);
    this.spy('instant').andReturn('');
  }
}

Я предоставляю это так:

    {
      provide: TranslateService,
      useValue: MockTranslateService,
    },

Мой компонент использует this.translateService.instant и получает: TypeError: this.translateService.instant is not a function.

С другой стороны, когда я регистрирую translateService в моем компоненте, я получаю:

class MockTranslateService extends spyobject_1.SpyObject {
          constructor() {
              super(core_1.TranslateService);
              this.spy('instant').andReturn(this);
          }
      }

есть идеи, почему шпион не работает? заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 02 июня 2019

Проблема заключалась в том, что я предоставил макет в тестовой конфигурации, это должно было выглядеть так:

    {
      provide: TranslateService,
      useValue: new MockTranslateService(),
    },

Я не до конца понимаю, почему иногда работает другой синтаксис, а иногда нетЯ думаю, это связано с тем, как Typescript обрабатывает типы.

0 голосов
/ 19 мая 2019

Для того, чтобы this.spy('instant') заработал, вам нужна функция для шпионажа. Это будет работать:

export class MockTranslateService extends SpyObject {
  constructor() {
    super(TranslateService);
    this.spy('instant').andReturn('');
  }

  public instant() { }
}

Поскольку функция instant уже определена, шпион может быть добавлен.


РЕДАКТИРОВАТЬ Это может быть проще. В блоке beforeEach выполните следующие действия:

beforeEach(() => {
  spyOn(TranslateService.prototype, 'instant');
});

Это ставит шпиона прямо на прототип и очищается после каждого теста.

...