Как правильно создать тест в ReactJs с помощью Jest, когда функция использует оператор if - PullRequest
1 голос
/ 05 августа 2020

A имеет приложение ReactJs со следующей функцией:

export function setTextoZonaNPS(valorNPS){
    if (valorNPS == null) return "Erro"
    else if (valorNPS >= 75) return "<span class='verde fonte_60x'>NPS: Zona de Excelência</span>"
    else if (valorNPS >= 50) return "<span class='verde fonte_60x'>NPS: Zona de Qualidade</span>"
    else if (valorNPS >= 0) return "<span class='laranja fonte_60x'>NPS: Zona de Aperfeiçoamento</span>"
    else if (valorNPS <  0) return "<span class='vermelho fonte_60x'>NPS: Zona Crítica</span>"
    else return "Erro"
}

Я пишу несколько тестов для приложения:

test('setTextoZonaNPS_set88String', () => {     expect( QuizzesHelper.setTextoZonaNPS("88") ).toMatch(/Excelência/)           })
test('setTextoZonaNPS_set88', () => {         expect( QuizzesHelper.setTextoZonaNPS(88) ).toMatch(/Excelência/)           })
test('setTextoZonaNPS_set47', () => {         expect( QuizzesHelper.setTextoZonaNPS(47) ).toMatch(/Qualidade/)           })
test('setTextoZonaNPS_set-6', () => {         expect( QuizzesHelper.setTextoZonaNPS(-6) ).toMatch(/Aperfeiçoamento/)           })
test('setTextoZonaNPS_setString', () => {         expect( QuizzesHelper.setTextoZonaNPS("-6") ).toMatch(/Erro/)           })
test('setTextoZonaNPS_setUndefined', () => {         expect( QuizzesHelper.setTextoZonaNPS(undefined) ).toMatch(/Erro/)           })
test('setTextoZonaNPS_setNull', () => {         expect( QuizzesHelper.setTextoZonaNPS(null) ).toMatch(/Erro/)           })
test('setTextoZonaNPS_setEmpty', () => {         expect( QuizzesHelper.setTextoZonaNPS() ).toMatch(/Erro/)           })

Все тесты прошли успешно. У меня есть несколько вопросов о тестах и ​​коде, который я пишу.

Мне нужно сначала проверить нулевое значение, потому что, когда я использую нулевое значение, оно такое же, как я использую значение 0 (ноль). Это обычный шаблон в Javascript?

Я пишу слишком много тестов? Есть ли лучший способ написать эти тесты?

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Я бы сказал, что это дело вкуса, но в такой ситуации я предпочитаю объединить все операторы expect в один тест it('setTextToZonaNPS', ....

И да, операции arithmeti c используют операция ToNumber при обнаружении NaN, например null.

1 голос
/ 05 августа 2020

Множественные тесты могут быть сгенерированы либо в al oop, либо с test.each:

const matchMap = [
  ["88", /Excelência/],
  [88, /Excelência/],
  ...
];

test.each(matchMap)('setTextoZonaNPS with %p', (value, match) => {
  expect(QuizzesHelper.setTextoZonaNPS(value)).toMatch(match);
});

Или это может быть выполнено в одном тесте, если желательно, чтобы тест не прошел при первой ошибке:

test('setTextoZonaNPS', () => {
  for (const [value, match] of matchMap)
    expect(QuizzesHelper.setTextoZonaNPS(value)).toMatch(match);
});

Не проверяется на NaN. == null может быть недостаточно для проверки недопустимых значений. Значение NaN покрывается >= 0 и < 0, но некоторые недопустимые значения могут пройти. Если намерение состоит в том, чтобы этого не допустить, это может быть:

value = Number.parseFloat(valorNPS);
if (Number.isNaN(valorNPS)) return "Erro"

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

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