【发布时间】:2014-12-18 08:22:07
【问题描述】:
我有一个用 CoffeeScript 编写的 Backbone 应用程序。我正在尝试使用 Mocha(与 Chai 和 Sinon)来编写与 DOM 相关的行为的测试,但似乎隐藏的固定装置(我现在正在使用 js-fixtures 但我也尝试使用隐藏的 @987654322 未成功@div) 不要注册某些与 DOM 相关的行为,这使得测试某些类型的 DOM 相关行为(似乎)不可能。
例如,我的主应用视图有几个从不同时渲染的子视图:当应用视图渲染子视图 A 时,它会记住当前活动的子视图 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='transcription' 的文本区域,但我无法设置焦点。
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'
有什么方法可以为这些类型的行为编写单元测试?
【问题讨论】:
标签: javascript jquery backbone.js coffeescript mocha.js