import {fakeAsync, TestBed, tick} from '@angular/core/testing'; import {AnswerService} from './answer.service'; import {timer} from 'rxjs'; import {mapTo} from 'rxjs/operators'; import {GameActionsService} from './game-actions.service'; describe('AnswerService', () => { let answerService: AnswerService; let gameActionsService: GameActionsService; beforeEach(() => { TestBed.configureTestingModule({}); answerService = TestBed.get(AnswerService); gameActionsService = TestBed.get(GameActionsService); }); it('should be created', () => { const service: AnswerService = TestBed.get(AnswerService); expect(service).toBeTruthy(); }); it('should send valid answer event after set a new answer', () => { setUsualConfig(); spyOn(answerService.validAnswer, 'emit'); answerService.currentAnswer = 'A answer'; expect(answerService.validAnswer.emit).toHaveBeenCalledWith(true); answerService['isValidAnswer'] = () => false; answerService.currentAnswer = 'Another answer'; expect(answerService.validAnswer.emit).toHaveBeenCalledWith(false); }); it('on try answer should emit try answer with current answer, and then checkedAnswer with boolean', fakeAsync(() => { setUsualConfig(); spyOn(answerService.tryAnswer, 'emit'); spyOn(gameActionsService.checkedAnswer, 'emit'); answerService['checkAnswer'] = () => timer(200).pipe(mapTo(true)); answerService.onTryAnswer(); expect(answerService.tryAnswer.emit).toHaveBeenCalledWith('A answer'); tick(200); expect(gameActionsService.checkedAnswer.emit).toHaveBeenCalledWith(true); })); function setUsualConfig() { answerService['isValidAnswer'] = () => true; answerService.currentAnswer = 'A answer'; } });