Как получить 100% тестовое покрытие с использованием reduxsauce - PullRequest
0 голосов
/ 25 июня 2019

Я пытаюсь протестировать приложение React с Redux (react-redux + reduxsauce), используя Jest.Я реализовал следующий подход:

import { createActions, createReducer } from "reduxsauce";

/**
* Action types & creators
*/
export const { Types, Creators } = createActions({
    addSample: ["text"],
    removeSample: ["id"]
});

/**
* Handlers
*/
export const INITIAL_STATE = [];
export function add(state = INITIAL_STATE, action) {
    return [...state, { id: Math.random(), text: action.text }];
}
export function remove(state = INITIAL_STATE, action) {
    return state.filter(sample => sample.id !== action.id);
}

/**
* Reducer
*/
export default createReducer(INITIAL_STATE, {
    [Types.ADD_SAMPLE]: add,
    [Types.REMOVE_SAMPLE]: remove
});

Эта реализация позволяет мне использовать хранилище Redux между компонентами.Тем не менее, в тесте я не могу достичь 100% покрытия, потому что только в критерии Branch I покрытие 0% (в других критериях я достигаю 100% - Statements, Functions, Lines);В ответе на Покрытие указано, что в строках 16 и 20 я не выполняю тесты, в объявлениях обработчиков add() и remove().

Я предполагаю, что внутренне reduxsauce реализует Reducer с некоторыми switch case, но я понятия не имею, как я могу тестировать эту часть пути, чтобы разрешить критерии покрытия теста

1 Ответ

0 голосов
/ 03 июля 2019

Достаточно взглянуть на этот раздел, и станет понятно, почему проблема (в данном случае не достичь 100% покрытия по критерию Branchs).

/* ... */ add(state = INITIAL_STATE, action) { /* ... */
/* ... */ remove(state = INITIAL_STATE, action) { /* ... */

Мы могли бы прочитать этот синтаксис следующим образом:

Декларация function add (), имеет следующее условие

  • если вы передадите значение в первом параметре, предположим, что state будет иметь это значение в области действия функции;
  • если не передано значение (или если это переданное значение равно undefined), предположим, что для state будет установлено значение INITIAL_STATE в области действия функции;

[Подробнее об этом синтаксисе здесь ]

Из-за объявленного условия необходимо проверить обе возможности, чтобы тест имел 100% охват по критериям Branch.

например:.

it("should return INITIAL_STATE when passed undefined on parameter and sometingh on action",
 () => {
    expect(setCurrent(undefined, action)).toBe(INITIAL_STATE);
 }
);

it("should return 'test' when passed 'test' on parameter and sometingh on action", 
  () => {
    expect(setCurrent("test", action)).toBe('test');
  }
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...