Как провести модульное тестирование этой функции с использованием TDD?

1

Я новичок в модульном тестировании и методе TDD, поэтому не могли бы вы мне помочь.

function calculate(a, b) {
    var sum = a + b;
    var sub = a - b;
    return { sum: sum, sub: sub };
}
Теги:
jestjs
tdd

3 ответа

1

Со шуткой вы можете сделать это так:

describe('calculation', ()=> {
  let result
  beforEach(()=>{
    result = calculate(2, 3)
  })
  it('returns the correct sum', (){
    expect(result.sum).toBe(5)
  })
  it('returns the correct sub', (){
    expect(result.sub).toBe(-1)
  })
})
  • 0
    Хороший элегантный пример ... мой голос за это ;-)
  • 0
    Большое спасибо @Andreas Köberle. Это работает, и я знаю идею, как проверить юнит-функцию, используя шутку.
1
it('checks calculations', function() {  
    var calculate = require('./example.js');
    expect(calculate(1, -1).sum).toBe(0);
    expect(calculate(1, -1).sub).toBe(2); 
});

Сохраните файл как.js и используйте тест npm. Я предполагаю, что вы используете jestjs. Вы можете определенно добавить другие условия тестирования в зависимости от вашего понимания функции.

  • 0
    Большое спасибо @Yash. Это работает, и я знаю идею, как проверить юнит-функцию, используя шутку.
0

Здесь совсем другой ответ: огромная проблема с проверкой такого кода вручную - это тот факт, что трудно сказать, когда вы написали достаточно тестов, охватывающих разные случаи.

Альтернативный подход: вместо того, чтобы указывать только ожидаемые результаты, вы отступаете назад и определяете контракты, к которым должен следовать ваш метод.

И затем вы используете одну из фреймворков на основе quickcheck, таких как JSVerify. Вы даете эти правила инструменту, а затем инструмент создает случайные данные и запускает тестовые примеры. И в случае, когда он обнаруживает нарушения контракта, он попытается "свести к минимуму" тестовый ввод, так что вы, в конце концов, получите сообщение "когда вы используете эти данные x, y, z, тогда будет нарушено правило A".

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

  • 0
    Большое спасибо @GhostCat за ваше замечательное предложение.
  • 0
    Добро пожаловать. Очевидно, что ответ Андреаса был бы вашим первым выбором, чтобы принять ... но, возможно, вы помните этот ответ - и придете в тот день, когда вы достигнете 15 прав и голосов, вы вернетесь, а также поделитесь полезными вещами, которые вы получили.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню