Сообщение от monolithed
|
Стефанов, Фленаган, Закас
|
Я и имел ввиду этих авторов + Ресиг. Забыл про Закаса. Потому что так и не читал.
Мне TDD кажется эффективной и для небольшого кода. Если привыкнуть, то циклы - "тест-провал-код-успех-рефакторинг" будут занимать немного времени, плюс экономится время затрачиваемое на поиск и устранение ошибок.
// очень простая функция, которую писал по задаче из ЕГЭ
function extractMaxNumber(str) {
argumentMustBe('string');
return assembleMaxNumber( extractDigits(str) );
function argumentMustBe(type) {
if (typeof str != type) {
throw new TypeError('Argument must be a ' + type);
}
}
function extractDigits(str) {
var digits = str.match(/[1-9]/g);
return digits ? digits.sort() : [];
}
function assembleMaxNumber(digits) {
return (digits.length !== 0) ? generateMaxNumber(digits) : 0;
}
function generateMaxNumber(digits) {
return trimMeaningless(digits.reverse().join('')) * 1;
}
function trimMeaningless(str) {
return str.replace(/(\d)\1+/g, '$1');
}
}
// очень простые тесты
TestCase('TestExtractMaxNumber', {
'test should throw error argument not string': function() {
assertException(invalidArg, 'TypeError');
function invalidArg() {
extractMaxNumber(null);
}
},
'test should return number': function() {
assertTrue(typeof extractMaxNumber('1992') == 'number');
},
'test should return zero if empty string': function() {
assertEquals(extractMaxNumber(''), 0);
},
'test should return zero if string without digits': function() {
assertEquals(extractMaxNumber('string'), 0);
},
'test should return ordered digits': function() {
assertEquals(98721, extractMaxNumber('9882string71820'));
}
});