Должен ли я использовать константы функции при тестировании функции? - PullRequest
1 голос
/ 17 апреля 2020

Если функция, которую я хочу проверить, использует константы, следует ли мне использовать эти константы при ее тестировании?

Например, если это функция:

export const SERVER_FILTERS = {
  URL: 'pageURL',
  PLATFORM: 'platform',
  TRAFFIC_SOURCE: 'trafficSource',
  COUNTRY: 'country',
  OPERATING_SYSTEM: 'operatingSystem',
  STATE: 'state',
};

export const formatUrlFilterForServer = filter => {
  return filter.conditions.map(({ value }) => {
    return {
      variable: SERVER_FILTERS.URL,
      value,
    };
  });
};

Следует ли мне использовать SERVER_FILTERS в моем тесте? или лучше написать явно строку, которую я хочу видеть в ожидаемом результате?

Например:

describe('formatUrlFilterForServer', () => {
  it('should format the URL filter correctly', () => {
    const value = 'blah.com';
    const filter = {
      conditions: [
        { value },
      ],
    };
    const expectedResult = [
      {
        variable: SERVER_FILTERS.URL,
        value,
      },
    ];
    expect(formatUrlFilterForServer(filter)).toEqual(expectedResult)
  })
});

С одной стороны, если я изменю эту константу, я не хочу go закончить все мои тесты и исправить их. С другой стороны, я думаю, что мой тест должен найти все проблемы, с которыми может столкнуться мой код, даже опечатки в его константах.

Есть ли здесь лучшая практика? спасибо всем.

1 Ответ

0 голосов
/ 18 апреля 2020
  • Вы используете константы, чтобы избежать опечаток, или если само значение не важно, и вам просто нужно убедиться, что вы используете одно и то же значение везде.
  • Вы тестируете код для убедитесь, что он ведет себя определенным образом c.

Это две аксиомы для работы здесь. Итак, вопрос в том, что вы тестируете? Важное значение имеет возвращаемое значение или нет? Тестируете ли вы, что ваша функция возвращает ожидаемое значение или ожидаемый бессмысленный флаг ?

Еще одна вещь, которую нужно задать себе при модульном тестировании, - что может сломаться если вы измените что-то и , поймут ли ваши тесты это . Если вы проверяете, что ваша функция возвращает ожидаемую константу , будет ли проблемой изменение этих констант? Ваша функция может теперь возвращать другое значение, но тест - проверка на константу - проходит без изменений. Это желаемое или нет?

Итак, если ваша функция отвечает за возвращение заданного c строкового значения (точное ожидаемое значение которого может быть определено внешними силами и должно точно соответствовать), тогда вы хотите проверить что ваша функция возвращает это точное строковое значение. Если, с другой стороны, вы просто хотите подтвердить, что ваша функция выполняет правильные логические шаги и выдает ожидаемое логическое состояние, но его точное значение не имеет значения, проверка константы - это просто замечательно.

Разумеется, вы также можете разделить разницу: убедитесь, что ваша функция возвращает ожидаемую константу, и подтвердите в отдельном тесте, что эти константы содержат ожидаемые значения. Вам просто нужно убедиться, что ваши тесты выявляют потенциальные причины ошибок.

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