1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54
|
describe('UserService', () => {
let service: UserService;
let envServiceSpy: SpyObj<EnvService>;
let userApiService: SpyObj<UserApiService>;
let usersMock = [
{id: 1, name: 'Walter White', bestQuote: 'I am the one who knocks.'},
{id: 2, name: 'Jesse Pinkman', bestQuote: 'Yeah, bitch! MAGNETS!'},
];
let envMock = {
apiUrl: 'http://example.com',
};
beforeEach(() => {
// It is a good idea to re-initiate the spy instance after each run so you do not face any weird side-effects.
// That way you also do not need to call `mySpy = TestBed.inject(MyService);`
envServiceSpy = createSpyObj('EnvService', ['load']);
envServiceSpy.load.and.returnValue(of(envMock))
userApiService = createSpyObj('UserApiService', ['getUsers'], ['rootUrl']);
userApiService.getUsers.and.returnValue(of(usersMock));
TestBed.configureTestingModule({
providers: [
UserService,
{provide: EnvService, useValue: envServiceSpy},
{provide: UserApiService, useValue: userApiService},
],
});
service = TestBed.inject(UserService);
});
it('should be created', () => {
expect(service).toBeTruthy();
});
it('should set rootUrl for userApiService on init', () => {
// Considering the `constructor()` did run already due to our initialization in `beforeEach()`
// we can just assert on our expectations
expect(envServiceSpy.load).toHaveBeenCalled();
expect(userApiService.rootUrl).toEqual('http://example.com');
});
// Here we test, that the `getUserList()` method in fact mapped
// the (mocked) response from `getUsers()` properly
it('should retrieve user list ', (done) => {
service.getUserList().subscribe((userList) => {
expect(userList).toEqual(usersMock);
expect(userApiService.getUsers).toHaveBeenCalled();
done();
}, done.fail);
});
}); |
Partager