【发布时间】:2013-06-27 01:14:15
【问题描述】:
我有一个函数可以将一些 HTML 加载到页面中,然后附加 DOM 元素和事件侦听器,并将变量 loaded设置为 true(用于测试目的)。它全部封装在一个父函数中,因此我可以传入参数并控制命名空间,而我需要测试的函数暴露在返回对象中。
((win) ->
win.PanelLoader = (args) ->
loaded = false
el =
container: $(".container")
showPanel = ->
$.get "panel.html", (data) ->
el.container.append(data)
attachDOMElements()
loaded = true
attachDOMElements = ->
el.panel = $(".panel")
panelHasBeenLoaded = ->
loaded
showPanel()
return {} =
el: el
showPanel: showPanel
) this
panelHasBeenLoaded() 只返回 false,直到 AJAX 请求成功。然后在我的规范文件中:
it "should confirm when the panel is loaded", ->
panelLoader = PanelLoader()
expect(panelLoader.el.panel).toBe(undefined)
waitsFor (->
panelLoader.panelHasBeenLoaded()
), "It took too long to load in the panel", 3000
runs ->
expect(panelLoader.el.panel.length).toBeGreaterThan(0)
我假设它正在初始化 PanelLoader,确认没有“面板”DOM 元素,然后 waitsFor 应该阻塞直到 `panelHasBeenLoaded() 返回 true,3 秒后超时(应该有足够的时间,从 localhost 运行),然后它运行测试,期望 DOM 元素现在在那里。
我遇到的问题是它总是超时,导致第二个期望测试失败。当我在浏览器中测试时一切正常,为什么我的单元测试不起作用?
我通过 grunt-contrib-jasmine runner 使用 jasmine 和 phantom JS 进行测试。
谢谢
【问题讨论】:
标签: unit-testing testing coffeescript jasmine phantomjs