#angular #typescript #unit-testing #service #karma-jasmine
#angular #typescript #модульное тестирование #Обслуживание #karma-jasmine
Вопрос:
Вот мой компонент :
@Component({
selector: 'app-signup',
templateUrl: './signup.component.html',
styleUrls: ['./signup.component.scss']
})
export class SignUpComponent implements OnInit {
specialLink: string;
constructor(
private activatedRoute: ActivatedRoute,
private techService: TechService
) {}
ngOnInit() {
this.specialLink = this.activatedRoute.snapshot.params.id;
if (this.specialLink !== undefined) {
console.log('GOOD1');
this.setSpecialSignup();
console.log('GOOD3');
}
setSpecialSignup() {
console.log('GOOD2');
this.techService.getStuff();
}
И вот мои тесты :
describe('SignUpComponent', () => {
let component: SignUpComponent;
let fixture: ComponentFixture<SignUpComponent>;
let ActivatedRouteMock: any;
beforeEach(async(() => {
ActivatedRouteStub = {
snapshot: {
params: { id: 123 }
},
};
TechServiceMock = jasmine.createSpyObj('TechService', ['getStuff']);
TechServiceMock.getStuff.and.returnValue(new Promise((resolve, reject) => { resolve() }));
TestBed.configureTestingModule({
declarations: [ SignUpComponent ],
imports: [ RouterTestingModule ],
providers: [
{provide: ActivatedRoute, useValue: ActivatedRouteStub},
{provide: TechService, useValue: TechServiceMock},
]
})
.compileComponents();
}));
beforeEach(() => {
fixture = TestBed.createComponent(SignUpComponent);
component = fixture.componentInstance;
});
describe('to get special signup', () => {
it('should call setSpecialSignup() one time when user is coming from special link', () => {
spyOn(component, 'setSpecialSignup');
ActivatedRouteStub.snapshot.params.id = "some_special_link";
fixture.detectChanges();
expect(component.setSpecialSignup).toHaveBeenCalled(); // it's working
});
it('should call TechService', () => {
ActivatedRouteStub.snapshot.params.id = "123";
fixture.detectChanges();
expect(TechServiceMock.getStuff).toHaveBeenCalled(); // it's NOT working
});
});
Я хочу проверить, был ли вызван techService.GetStuff(). Служба находится в
Установите метод Specialsignup() в компоненте регистрации.
Метод был вызван, когда я его тестировал, но журналы в консоли говорят мне об обратном. (Это идет GOOD1 и GOOD3 без GOOD2, что странно).
Возможно, это простой вопрос, но есть ли какое-либо объяснение для этого? Как я могу проверить, был ли вызван TechServiceMock.GetStuff()? Я пробовал разные подходы к макетированию TechService, но ни один из них не помог.
Что я пропустил?
Ответ №1:
Если я вас правильно понял, вы ищете метод callThrough(), подробнее о нем вы можете прочитать здесь:https://hatoum.com/blog/2016/11/12/jasmine-unit-testing-dont-forget-to-callthrough
Комментарии:
1. Идеально! Статья очень информативная и очень понятная, большое спасибо 🙂