Unit-Test d'un Service

Il serait dommage de ne pas profiter de la Dependency Injection lors de l'implémentation des tests unitaire.

TestBed.get 👍

La méthode statique TestBed.get permet d'injecter les services dans les tests unitaires.

describe('PickyWeatherStation', () => {

    it('should give temperature', fakeAsync(() => {

        const weatherStation: PickyWeatherStation = TestBed.get(PickyWeatherStation);

        let temperature;

        weatherStation.getTemperature('Lyon')
            .subscribe(_temperature => temperature = _temperature);

        expect(temperature).toBe(42);

    }));

});

Pensez à définir un "Live Template" dans l'IDE.

Angular Test Injection Live Template

inject 👎

La fonction inject (du module @angular/core/testing) permet également d'injecter des services dans les tests unitaire.

Cette fonction prend deux paramètres :

  • la liste des tokens à injecter (généralement liste des classes à injecter),

  • une fonction de "callback" qui prend en paramètre la liste des services injectés dans le même ordre que la liste de tokens.

La fonction inject peut être utilisée directement autour de la fonction de "spec" mais il est généralement plus simple d'ajouter un beforeEach pour chaque service afin d'éviter les problèmes liés à l'ordre des tokens d'injection et le refactoring en général.

Mis à jour