Advanced testing

Mocks

Concernant les tests, voici les valeurs pour traiter les différents cas :

store/mock-value.ts

import { Todo } from '@Models/todo';
import * as fromReducer from '@Reducers/todo-list.reducer';

export const { initialState } = fromReducer;

export const arrayOfTodos: Todo[] = [
    { id: 1, userId: 2, title: 'for testing 1', completed: true },
    { id: 2, userId: 5, title: 'for testing 2', completed: false },
    { id: 3, userId: 4, title: 'for testing 3', completed: false },
    { id: 4, userId: 9, title: 'for testing 4', completed: true }
];

export const stateWithData = {
    ...initialState,
    ids: [1, 2, 3, 4],
    loaded: true,
    entities: {
        1 : arrayOfTodos[0],
        2 : arrayOfTodos[1],
        3 : arrayOfTodos[2],
        4 : arrayOfTodos[3],
    }
};


export const singleTodo: Todo = { id: 2, userId: 5, title: 'for testing 2', completed: false };

Actions

Tester nos actions reste relativement simple. Créer une instance de l'action et vérifier le type ainsi que le payload si besoin :

todo-list.actions.spec.ts

Reducers

Concernant les tests de reducer, c'est également très simple :

todo-list.reducer.spec.ts

Selectors

Afin de tester les selectors, créer une instance de store accessible depuis le test dans le beforeEach . Cela nous permet de récupérer le state par défaut du selector pour ensuite déclencher une action dans le test afin de vérifier la valeur du selector après une action x.

todo-list.selector.spec.ts

Effects

Pour tester les effects, utiliser jasmine-marbles.

todo-list.effect.spec.ts

La couverture de nos tests est maintenant optimisée à 100%.

Last updated

Was this helpful?