WeatherApp est une application développée à l'aide du Framework Angular 14.
Cette application a pour objectif de servir de Bac à sable pour exercice, kata et coding dojos lorsque le contexte s'y prête.
npm install
- Tests Unitaires Objet
Rajouter à la classeTownWeather
la methodetemperatureRange()
pour calculer l'amplitude de température (en degrés) avec test unitaire et afficher le champ dans la page de détails
Voir la solution - Tests Unitaires Service
Crée le serviceTrendingService
: Selection d'une ville random pour construction du lien d'actualité (texte + url)- Créer le model
Trending
contenant les champslabel
&url
- Créer le service
TrendingService
- Rajouter au service
TrendingService
la methoderetrieveTrending()
avec test unitaire : qui choisit aléatoirement une ville (<nom_ville>) parmi la liste des villes retournées par l'api et génère le Trending suivant :{ "label" : "Visiter <nom_ville>", "url" : "https://www.google.com/search?q=<nom_ville>" }
- Afficher le résultat du trending le dans le template
weather.component.html
Voir la solution
- Créer le model
- Test du dom avec
TestingLibrary
: Documentation
Rajouter de nouveaux cas de test dans le fichiersrc/app/components/town-selector/town-selector.component.spec.ts
pour :- Vérifier avec la méthode
const listOfTownsContainer = screen.getByRole('list', ...)
que la page html contient une liste nomméeAvailable Towns
Voir la solution - Vérifier avec la méthode
getAllByRole(listOfTownsContainer, 'listitem')
que la liste des villes restituées est conforme au paramètreglobalWeather
du composant (penser à bien initialiser cette attribut dans le test)
Voir la solution
- Vérifier avec la méthode
- Mock d'un observable : Le but est de vérifier la bonne initialisation du composant
WeatherComponent
en mockant la méthodeweatherService.getCurrentWeather()
.
Ecrire des tests unitaires vérifiant la valeur du signalWeatherComponent.availableTownWeather
en prennant soin de gérer les différents cas possibles.
Exemple de mock :Voir la solutionit('<nom du test à changer>', () => { ... // Création du mock const getCurrentWeatherMock = jest.fn(() => of(MOCK_TONWS_WEATHER) ); const weatherService = TestBed.inject(WeatherService); // Remplacement de la vraie méthode par le mock weatherService['getCurrentWeather'] = getCurrentWeatherMock; // Initialisation du composant fixture = TestBed.createComponent(WeatherComponent); component = fixture.componentInstance; // Déclenche la détection des changements pour appliquer ces changements au component fixture.detectChanges(); expect(component).toBeTruthy(); // Vérification de l'appel au mock expect(getCurrentWeatherMock).toHaveBeenCalledTimes(1); // Autres vérifications ... });
Voir Kata E2E UUV
L'objectif ici est de faire porter le mécanisme de sélection d'une ville par l'outil de gestion de store NGXS Store
- Créer un store avec la commande suivante :
ng generate @ngxs/store:store --path stores --name weather
- Migrer la Selection d'une ville vers le store :
- Ajouter la propriété
selectedTownWeather
dans le stateweather.state.ts
pour porter l'information de la ville sélectionnée - Déclarer l'action de selection d'une ville
selectTown
dans le fichierweather.action.ts
- Implémenter l'action dans le fichier
weather.state.ts
- Rajouter les tests unitaires pour l'action
WeatherState.selectTown
dans le fichierweather.state.spec.ts
et les modifications nécessaires pour que tous les tests unitaires s'exécutent sans erreur - Mettre à jour la configuration
app.config.ts
et les composantsweather
ettown-selector
pour utiliser le selecteurWeatherState.getSelectedTownWeather
et l'actionWeatherState.selectTown
.
Voir la solution
- Ajouter la propriété