Шутливое покрытие в redux reducer — уничтожение объекта не покрыто

#ecmascript-6 #redux #jestjs

#ecmascript-6 #сокращение #jestjs

Вопрос:

У меня следующая проблема с Jest: у меня есть этот редуктор:

 [REMOVE_FILTER]: (state: FiltersState, action: Action<string>): FiltersState => {
    const { [action.payload!]: deleted, ...activeFilters } = state.activeFilters;
    return { ...state, activeFilters, createFilterSelection: undefined, filterCreateOpen: false };
}
  

Когда я пытаюсь это протестировать, он говорит, что у меня нет покрытия для

 ...activeFilters } = state.activeFilters;
  

Вот мой тест:

 test(REMOVE_FILTER, () => {
    const action: IAction<string> = {
        type: REMOVE_FILTER,
        payload: "subprovider"
    };

    expect(
        testReducer({ reducer, state, action })
    ).toEqual({
        ...state,
        activeFilters: { name: null, branded: null },
        createFilterSelection: undefined,
        filterCreateOpen: false
    });
});
  

Может кто-нибудь подсказать, что я делаю неправильно?

Я использую:

  1. Jest 23.6.0
  2. Typescript 3.4.0
  3. Сокращение 4.0.0
  4. Реагирование-сокращение: 6.0.0
  5. Действия по сокращению: 2.6.1

Спасибо!

P.S: Вот конфигурация Jest:

 {
  "coverageThreshold": {
    "global": {
      "branches": 100,
      "functions": 100,
      "lines": 100,
      "statements": 100
    }
  },
  "globals": {
    "window": true,
    "document": true
  },
  "transform": {
    ".(ts|tsx)": "<rootDir>/node_modules/ts-jest/preprocessor.js"
  },
  "testRegex": "(/__test__/.*)\.test\.(ts|tsx)$",
  "notify": true,
  "collectCoverageFrom": [
    "**/*.{ts,tsx}"
  ],
  "coveragePathIgnorePatterns": [
    "(/__e2e__/.*)",
    "(/__specs__/.*)",
    "(/__test__/.*)",
    "(/interfaces/.*)",
    "(index.ts)",
    "(src/server/app.ts)",
    "(src/server/config.ts)",
    "(/mock/.*)",
    "(data/mock.ts)",
    "(automapperConfiguration.ts)",
    "(src/app/store/store.ts)",
    "(src/app/containers/brand-configuration/.*)"
  ],
  "moduleFileExtensions": [
    "ts",
    "tsx",
    "js",
    "json"
  ],
  "setupTestFrameworkScriptFile": "<rootDir>/jestSetup.js",
  "testURL": "http://localhost/"
}
  

Приведенный выше TS-код переносится в:

     [REMOVE_FILTER]: (state, action) => {
        const _a = state.activeFilters, _b = action.payload, deleted = _a[_b], activeFilters = __rest(_a, [typeof _b === "symbol" ? _b : _b   ""]);
        return Object.assign({}, state, { activeFilters, createFilterSelection: undefined, filterCreateOpen: false });
    }
  

Комментарии:

1. Предполагая, что вы используете babel для переноса своих файлов этот синтаксис ES6. Можете ли вы добавить свою конфигурацию babel и jest?

2. Привет, я использую не Babel, а компилятор Typescript. конфигурация jest добавлена в сообщение