У меня была такая же проблема. Я хотел написать тест, в котором при нажатии клавиши ввода в графическом интерфейсе позиция (li) добавляется в список. Для этого мне нужно было «сгенерировать» нажатие клавиш. Попытавшись сгенерировать событие, смоделировать событие, смоделировать событие (jqMock), вот очень простое решение.
Я могу продолжить с BDDing моего кода, используя код jsSpec и jQuery. Этот тест будет немного сложнее, если вы используете плагин для управления нажатиями клавиш (например, плагин hotkeys jQuery)
Вот что я хочу сделать:
<code>describe 'I need to be able to edit items in a list', {</p>
<p>... [setup code and other tests]</p>
<p>'should create a new item if I press enter': function(){
value_of($('#todo').items().size()).should_be(7)
// be on the last item in the list
task = $('#todo').items().filter(':last').focus()
// press enter
task.__keypress(13)
// check that an item was added
value_of($('#todo').tasks().size()).should_be(8)
},
}
Вот код, который связывает обработчик. Обратите внимание, что в этом решении я перехватываю событие и прохожу только через код which
- это позволяет мне передать значение из теста. Это все, что мне нужно на данный момент. Очевидно, что если бы я хотел перехватить больше, мне нужно было бы расширить то, что передается (например, см. Плагин jquery.hotkeys):
$().items().bind('keypress', function(event){$().__keypress(event.which)})
А вот обработчик:
__keypress: function(which){
switch(which)
{
...
case 13: // enter
[my code that creates a new item]
break;
default:
}
},
ps: если кто-то умеет издеваться над window.event, дайте мне знать. Мне не повезло с использованием jqMock.