У меня есть приложение Backbone, написанное на CoffeeScript. Я пытаюсь использовать Mocha (с Chai и Sinon) для написания тестов для поведения, связанного с DOM, но кажется, что скрытые приспособления (я использую js-fixtures сейчас, но я также пробовал это безуспешно со скрытым '#fixtures'
div) don Зарегистрируйте определенное поведение, связанное с DOM, которое делает тестирование определенных типов поведения, связанных с DOM (по-видимому) невозможным.Тесты Mocha на поведение, связанное с фокусом (приложение Backbone/CoffeeScript)
Например, у моего основного приложения есть несколько подзапросов, которые никогда не отображаются в одно и то же время: когда вид приложения отображает subview A, он запоминает сфокусированный элемент активного в настоящее время subview B (@_visibleView
), сохраняет эту информацию на подтаблицы B, закрывает подвид B, а затем делает подвид A.
_rememberFocusedElement: ->
focusedElement = $ document.activeElement
if focusedElement
focusedElementId = focusedElement.attr 'id'
if focusedElementId
@_visibleView?.focusedElementId = focusedElementId
Это работает, когда я проверить его вручную, но когда я пытаюсь писать тесты для такого поведения они терпят неудачу, потому что я не могу установить фокус (например, через $(selector).focus()
) к элементу в скрытом div/iframe. (У меня такая же проблема с функциональностью, которая слушает события изменения размера окна.)
Я думал, что если бы я изменил $ document.activeElement
на @$ ':focus"
Я могу получить разные результаты, но это не проблема.
Вот как выглядят соответствующие части моих тестов Mocha (BDD). Эта спецификация напечатает TEXTAREA
на консоли, а затем undefined
, указывая, что - это текстовое поле с id = 'транскрипция', но я не могу установить на него фокус.
beforeEach (done) ->
fixtures.path = 'fixtures'
callback = =>
@$fixture = fixtures.window().$ "<div id='js-fixtures-fixture'></div>"
@appView = new AppView el: @$fixture
done()
describe 'GUI stuff', ->
it 'remembers the currently focused element of a subview', (done) ->
@appView.mainMenuView.once 'request:formAdd', =>
@appView._visibleView.$('#transcription').focus()
console.log @appView._visibleView.$('#transcription').prop 'tagName'
console.log @appView._visibleView.$(':focus').prop 'tagName'
done()
@appView.mainMenuView.trigger 'request:formAdd'
Есть ли способ, которым я могу написать модульные тесты для этих типов поведения?