Used Angular version is 15 and Jasmine is 4.5.0.
Our component page:
export class HomeComponent implements OnInit { student?: StudentWithBasicProfile; constructor( private studentService: StudentService, private route: ActivatedRoute) { } ngOnInit(): void { let studentId = this.route.snapshot.params['id']; this.studentService.getStudentBasicProfile(studentId) .subscribe(student => { this.student = student; }); } }This component retrieves an id from query string then call a method of a service then display the result.
Our tests look like this:
describe('HomeComponent', () => { let component: HomeComponent; let fixture: ComponentFixture<HomeComponent>; let studentServiceSpy: jasmine.SpyObj<StudentService>; let response: StudentWithBasicProfile; let routeId: number = 123; beforeEach(async () => { studentServiceSpy = jasmine.createSpyObj('StudentService', ['getStudentBasicProfile']); response = { studentId: routeId, firstName: '', lastName: '', email: '', mobilePhone: '' }; studentServiceSpy.getStudentBasicProfile.and.returnValue(of(response)); await TestBed.configureTestingModule({ declarations: [HomeComponent], providers: [ { provide: StudentService, useValue: studentServiceSpy }, { provide: ActivatedRoute, useValue: { snapshot: { params: { 'id': routeId } } } } // this one is to fake "this.route.snapshot.params['id']" code ] }) .compileComponents(); fixture = TestBed.createComponent(HomeComponent); component = fixture.componentInstance; fixture.detectChanges(); }); it('should create', () => { expect(component).toBeTruthy(); }); it("should call getStudentBasicProfile() with correct parameter and return data", () => { expect(studentServiceSpy.getStudentBasicProfile).toHaveBeenCalledTimes(1); expect(studentServiceSpy.getStudentBasicProfile).toHaveBeenCalledWith(routeId); expect(component.student).toEqual(response); }); });On lines 4, 9, and 17, we set up a fake StudentService and its function 'getStudentBasicProfile' and set up a return value. Then on line 22, we use this fake service instead of the real service.
On line 23, we fake the query string value in route with "{ snapshot: { params: { 'id': [VALUE] } } }".
No comments:
Post a Comment