Как смоделировать значение параметра геттера для смоделированной службы - PullRequest
0 голосов
/ 16 ноября 2018

Я пробовал этот SO пост, но это не мой случай.

У меня есть сервис (AnimationService), который зависит от другого сервиса (AnimationStateService),У этого AnimationStateService есть геттер state, который я хочу высмеять в своем тесте.Итак, мой тест выглядит следующим образом:

animation.service.spec.ts

describe("AnimationService", () => {

let animationService: SpyObj<AnimationService>;
let animationStateService: SpyObj<AnimationStateService>;

beforeEach(() => {

    const spyAnimationStateService = createSpyObj("AnimationStateService", ["changeStatus"]);

    TestBed.configureTestingModule({
        providers: [
            AnimationService,
            {provide: AnimationStateService, useValue: spyAnimationStateService}
        ]
    });

    animationStateService = TestBed.get(AnimationStateService);
    animationService = TestBed.get(AnimationService);
});

fit("should call changeStatus if status is AnimationStatus.Stopped", () => {
    // Arrange
    // animationStateService.status.and.returnValue(AnimationStatus.Stopped); - Doesn't work
    // spyOnProperty(animationStateService, "status").and.returnValue(AnimationStatus.Stopped); - Doesn't work
    // animationStateService.status = AnimationStatus.Stopped; - Works, but with TSLint error

    // Act
    animationService.start();

    // Assert
    expect(animationStateService.changeStatus).toHaveBeenCalled();
   });
});

animation-state.service.spec.ts

@Injectable()
export class AnimationStateService {

public get status(): AnimationStatus { return this.state.animation.status; }
...
}

Когда я пытался издеваться над геттером с помощью:

animationStateService.status.and.returnValue(AnimationStatus.Stopped);

или с помощью:

spyOnProperty(animationStateService, "status").and.returnValue(AnimationStatus.Stopped);

Это не сработало.Получатель просто не возвращает значение, которое я установил.

Этот подход работает:

animationStateService.status = AnimationStatus.Stopped;

, но он дает мне ошибку TSLint:

Cannot assign to 'status' because it is a constant or a read-only property.

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

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