Test unitaire mock service
Bonjour,
J'ai le tests unitaire suivant :
Code:
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);
});
}); |
Mais celui retourne l'erreur suivante :
Test should set rootUrl for userApiService on init' :
Error: Expected spy EnvService.load to have been called.,
Error: Expected undefined to equal 'api'.
Test should return value from observable :
service.getUserList() is not a function
Voici mon service à tester :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
export class UserService {
private env: EnvConfiguration;
constructor(private userApiService: UserApiService, private envService: EnvService) {
this.envService.load().subscribe(env => {
this.env = env;
});
this.userApiService.rootUrl = this.env.apiUrl;
}
getUserList(): Observable<User[]> {
return this.userApiService.getUsers().pipe(
map(result => result),
catchError(err => { return throwError(err);
})
);
}
} |
Je vois pas ou est le problème