У меня есть функция, которая загружает HTML-код на страницу, а затем присоединяет элементы DOM и прослушиватели событий и устанавливает переменную loaded
в true (для целей тестирования). Все это завернуто в родительскую функцию, поэтому я могу передать аргументы и управлять пространством имен, с функциями, которые мне нужно проверить, выставленными в возвращаемом объекте.jasmine asynchronous testing waitsFor/run timeout
((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() возвращает истинное, время через 3 секунды (должно быть достаточно времени, отключение localhost), тогда он запускает тест, ожидая, что элемент DOM теперь будет там.
Проблема, с которой я сталкиваюсь, заключается в том, что она всегда выберет время, в результате чего второй тест ожидания завершится неудачей. Это все работает, когда я тестирую в браузере, так почему же мой модульный тест не работает?
Я использую жасмин и фантомный JS для тестирования через бегун из-за жасмина.
Благодаря