2013-08-06 2 views
1

Я работаю в обратном порядке в жизненном цикле системы. Несколько месяцев назад я написал большую библиотеку javascript. Затем мне пришлось сделать все это объективно, и теперь я должен написать для него единичные тесты. Я использую Maven и имею jasmine-maven-plugin в моем pom.xml. Проблема, с которой я сталкиваюсь, - это то, что я должен писать тесты и сколько.Что я должен писать модульные тесты для Jasmine?

Этот первый пример прост. Функция принимает строку и возвращает ее с заглавной буквой.

var toolsFn = { 
    capitaliseFirstLetter: function(string) { 
     return string.charAt(0).toUpperCase() + string.slice(1); 
    } 
}, 

и поэтому мой блок проверить:

describe("toolsFn - capitaliseFirstLetter", function() { 
    it("capitalises the first letter of a given string", function() { 
     expect(toolsFn.capitaliseFirstLetter("hello World!")).toBe("Hello World!"); 
    }); 
}); 

Однако, я не уверен, что я должен сделать для многих из моих других методов. Большинство из них относятся к html-коду, например, к изменению вкладки, показу уведомлений, отключению/включению элементов управления. Должен ли я просто ожидать метода toHaveBeenCalled или есть ли что-то еще для этого?

Пожалуйста, проверьте следующие примеры, которые изменяют вкладки, загружают данную вкладку и скрывают уведомление;

tabsFn = { 
    changeTab: function() { 
     $(tabButtons).addClass('inactive'); 
     $(tabContent).hide(); 
     $(this).removeClass('inactive'); 
     var tab = $(this).attr('tab'); 
     $('.tab-content-' + tab).show(); 
     return false; 
    }, 
    loadTab: function(tab) { 
     $(tabButtons).addClass('inactive'); 
     $(tabContent).hide(); 
     $('[tab~="' + tab + '"]').removeClass('inactive').removeAttr('disabled'); 
     $('.tab-content-' + tab).show(); 
    }, 

messageFn = { 
    hideNotification: function(time) { 
     $(messageFn.notificationBar).stop(true, true).fadeOut(time); 
    }, 

Любые разъяснения очень ценятся.

ответ

1

Большинство из них имеют дело с кодом html, таким как изменение вкладки, отображение уведомления, отключение/включение элементов управления.

То, что вы хотите проверить для этого, - это правильное поведение (например, изменение содержимого). Обычно это делается с помощью теста интеграции, а Jasmine - не лучший инструмент для тестирования интеграции. Такие инструменты, как Selenium, будут лучше выполнять этот тест.

Просто не попадайте в ловушку, чтобы начать тестирование, если вызываемая функция вызывается для проверки работоспособности функциональности. Внутренняя часть этой функциональности может меняться и вызывать другую функцию, и это не значит, что она теперь сломана. Вот почему лучше делать это на более высоком уровне (интеграционное тестирование).

Проблема, которую я имею то, что я должен писать тесты для, и сколько

Обычно вы пишете модульное тестирование для каждой функции, которые не предназначены для изменения состояния приложения , Ваша функция капитализации является хорошим примером функции, которая тестируется модулем.

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

+0

Отличный ответ спасибо, я очень ценю объяснение! – Patrick

Смежные вопросы