Я проверяю селекторы вручную, а затем передаю их в код, который их использует. Затем я могу выполнить модульное тестирование кода, который их использует. Если вы хотите просто протестировать селектор, вам нужен доступ к HTML, на который он влияет. Ваш тест может включать в себя целевой HTML, что-то вроде:
test("selector works", function() {
var html = $('<input type="select"><option value=0/></input');
var result = $('option', html);
ok(result.count() == 1);
});
Но я этого не делаю ... Я ставлю свои селекторы на край кода, чтобы я мог быстро добраться до них и просмотреть их в отладчике. У меня будет простой класс, свойства которого являются теми селекторами. Затем я посмеюсь над этим простым классом, чтобы написать код для всего, что зависит от этих селекторов.
Причина, по которой я не проверяю свои селекторы, заключается в том, что целевой HTML-код генерируется кодом ASP.NET, и его трудно получить из теста javascript. Но я могу обернуть их в Humble Object («http://xunitpatterns.com/Humble Object.html»), а затем протестировать код, который зависит от этого скромного объекта. Вот простой класс-обертка, который я могу заменить на тестовые двойники:
var createSelectWidget = function(rootSelector)
{
return {
userText : $('span', rootSelector),
inputList : $('option', rootSelector),
};
}
Какой бы шаблон внедрения зависимостей вы не использовали, вы можете затем заглушить его, как показано ниже. Предположим, у моего виджета есть входные данные для выбора значения и диапазон, в который я хочу записать некоторые результаты:
var createSelectWidgetStub = function()
{
return {
userText : { text = function() {}},
inputList : { val = function() {}},
};
}
Затем я могу обойти эту заглушку в тестах, где я хочу изолировать зависимость, но не беспокоиться о взаимодействии с этой зависимостью. Когда я хочу проверить взаимодействие с зависимостью, я могу посмеяться над этим с помощью JSMock. Предположим, что я хочу проверить взаимодействие со списком ввода, я бы подготовил заглушку с одним элементом mock'd:
var selectMock = createSelectWidgetStub();
selectMock.inputList = mc.createMock(selectMock.inputList);