Как смоделировать значения константы в тестируемой функции - PullRequest
0 голосов
/ 11 февраля 2019

У меня проблема с константой в моём тесте.У меня есть файл с конфигурацией приложения.Есть только ключи с некоторыми значениями, ничего больше.

appConfig.js

//imports
 ...
 export const CASHING_AMOUNT_LIMIT = 50;
 export const CASHING_DELETE_AMOUNT = 25;
 ...

, и это редуктор, который я хочу проверить:

reducer.js

import {
  CASHING_AMOUNT_LIMIT,
  CASHING_DELETE_AMOUNT,
 } from '../appConfig';
 ...
export const reducer = handleActions({
  [REQUEST_DATA]: (state, action) => {
    if (payload.count >= CASHING_AMOUNT_LIMIT) {
      // do something with data if the condition is true
    }

    return {
      ...someState,
    };
  },
  ...

В моем тесте я хочу изменить значение на CASHING_AMOUNT_LIMIT и проверить, возвращает ли редуктор текущее хранилище.И я не знаю, как смоделировать эту переменную в reducer.js.Вот мой тест:

...//imports
    const mockValues = {
      CASHING_AMOUNT_LIMIT: 10,
      CASHING_DELETE_AMOUNT: 5,
    };
    jest.mock('../../appConfig.js', () => mockValues);

    const {
      CASHING_AMOUNT_LIMIT,
      CASHING_DELETE_AMOUNT,
    } = require('../../appConfig.js');
...

  it('MY awesome test ', () => {

    expect(CASHING_AMOUNT_LIMIT).toBe(10);
    expect(CASHING_DELETE_AMOUNT).toBe(5); 


    // HERE is all ok CASHING_AMOUNT_LIMIT = 10 and the second variable is 5 
    //  tests are OK
    // ....


    expect(storeWithCache.dispatch(requestFunction({ test: 'XX'})))
    .toEqual(myStore);
    ...

В конце я использую dispatch, который вызывает мое действие и функцию редуктора в reducer.js, он работает нормально ... но со старым значением для CASHING_AMOUNT_LIMIT это все еще50 (как в appConfig.js), и мне нужно установить 10

Может ли кто-нибудь помочь мне с насмешкой CASHING_AMOUNT_LIMIT в reducer.js?

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

У меня есть решение, у нас есть все макеты в одном файле testenv.js, и оно импортируется глобально. Я положил туда jest.mock('../../appConfig.js'), и оно работает!

0 голосов
/ 11 февраля 2019

Эта часть

jest.mock('../../appConfig.js', () => mockValues);

Должна быть вне блока описания, под импортом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...