Я новичок в модульном тестировании и методе TDD, поэтому не могли бы вы мне помочь.
function calculate(a, b) {
var sum = a + b;
var sub = a - b;
return { sum: sum, sub: sub };
}
Со шуткой вы можете сделать это так:
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)
})
})
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. Вы можете определенно добавить другие условия тестирования в зависимости от вашего понимания функции.
Здесь совсем другой ответ: огромная проблема с проверкой такого кода вручную - это тот факт, что трудно сказать, когда вы написали достаточно тестов, охватывающих разные случаи.
Альтернативный подход: вместо того, чтобы указывать только ожидаемые результаты, вы отступаете назад и определяете контракты, к которым должен следовать ваш метод.
И затем вы используете одну из фреймворков на основе quickcheck, таких как JSVerify. Вы даете эти правила инструменту, а затем инструмент создает случайные данные и запускает тестовые примеры. И в случае, когда он обнаруживает нарушения контракта, он попытается "свести к минимуму" тестовый ввод, так что вы, в конце концов, получите сообщение "когда вы используете эти данные x, y, z, тогда будет нарушено правило A".
Это совсем другой подход по сравнению с "нормальным" TDD и модульным тестированием, но особенно для такой функциональности это может быть очень эффективная дополнительная вещь.