일부 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()는 AJAX 요청이 성공할 때까지 단순히 false를 반환합니다. 그럼 내 사양 파일에 내가 가진 :
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)
내가 있다는 것을 더 '패널'DOM 요소를 확인하지, 그것은 PanelLoader를 초기화하는 것 있으리라 믿고있어`panelHasBeenLoaded()가 true, 타이밍을 반환 할 때까지, 다음 waitsFor
는 차단해야 3 초 후에 (로컬 호스트에서 실행되는 충분한 시간이 있어야 함) DOM 요소가있을 것으로 기대하면서 테스트를 실행합니다.
내가 겪고있는 문제는 항상 시간 초과되어 2 차 기대 테스트가 실패하는 것입니다. 브라우저에서 테스트 할 때 모두 작동하므로 내 단위 테스트가 작동하지 않는 이유는 무엇입니까?
저는 자스민 (jasmine)과 팬텀 JS (phantom JS)를 테스트 용으로 grunt-contrib-jasmine 러너를 통해 사용하고 있습니다.
덕분에