Я пытаюсь следить за службой всякий раз, когда она вызывается в любом тесте, поэтому создайте макет:
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);
}
}
есть идеи, почему шпион не работает? заранее спасибо.
Чтобы this.spy('instant')
работал, вам нужна функция, за которой можно следить. Это будет работать:
export class MockTranslateService extends SpyObject {
constructor() {
super(TranslateService);
this.spy('instant').andReturn('');
}
public instant() { }
}
Поскольку функция instant
уже определена, можно добавить шпиона.
РЕДАКТИРОВАТЬ Это может быть проще. В блоке beforeEach
сделайте следующее:
beforeEach(() => {
spyOn(TranslateService.prototype, 'instant');
});
Это помещает шпиона прямо на прототип, и он очищается после каждого теста.
Я просто следовал шаблону, который вы показали, и показывал потенциальный способ его исправить. Но есть более простое решение, которое должно работать. Я собираюсь отредактировать свой ответ.
Я отменил голосование против, чтобы вы не были оштрафованы, спасибо за попытку помочь, но, пожалуйста, проверьте код в следующий раз :)
Трудно протестировать код, если вы не дадите мне что-то для тестирования.
Проблема заключалась в том, как я предоставил макет в тестовой конфигурации, он должен был быть таким:
{
provide: TranslateService,
useValue: new MockTranslateService(),
},
Редактировать:
если вы хотите использовать имя класса: вместо useValue
используйте useClass
Не работает, ты проверял? Кроме того, какой смысл передавать
super(TranslateService);
, мне нужно переопределить все методы, которые я хочу шпионить вручную