Jasmine / Javascript - почему элемент DOM доступен только по ссылке из асинхронного then ()? - PullRequest
0 голосов
/ 30 ноября 2018

После очередного тестирования ... Я наткнулся на интересное поведение, которое я не понимаю.

Код:

function someFunction() {
  ... // whatever this is stubbed
}

// below is called ("mounted") by finalDOM.mountUserActions()     
$("#button").click(function() {
  savedElement = $("#saved_element")
  console.log("BEFPRE THEN in event listener ==========")
  console.log("found saved_element? = " + savedElement.length)
  console.log("found unsaved_element? = " + $("#unsaved_element").length)

  someFunction().then(function(result){
    console.log("INSIDE THEN in event listener ==========")
    savedElement.val(result)
    $("#unsaved_element").val(result)
    console.log("ensure result is found = " + result)
    console.log("found saved_element? = " + savedElement.length)
    console.log("found unsaved_element?  = " + $("#unsaved_element").length)
  })
})

Код теста:

fdescribe("on click of button", function() {
  beforeEach(function(){
    response = Promise.resolve("test")
    spyOn(window, "someFunction").and.returnValue(response)
    savedElement = affix("#saved_element")
    affix("#unsaved_element")
    affix("#button")
    finalDOM.mountUserActions();
    $("#button").click()
  })
  it("should change value of saved_element", function() {
    response.then(function() {
        console.log("INSIDE SPEC EXPECTATION ==========")
        console.log("value of saved_element = " + savedElement.val())
        console.log("value of unsaved_element = " + $("#unsaved_element").val())
      expect(savedElement.val()).toEqual("test") // PASS
      expect($("#unsaved_element").val()).toEqual("test") // FAIL
    })
  })
})

Вывод на консоль:

BEFPRE THEN in event listener ==========
found saved_element? = 1
found unsaved_element? = 1
INSIDE THEN in event listener ==========
ensure result is found = test
found saved_element? = 1
found unsaved_element?  = 0
INSIDE SPEC EXPECTATION ==========
value of saved_element = test
value of unsaved_element = undefined

Тот факт, что длина обоих элементов равна 1 в BEFORE THEN in event listener, доказывает, что аффикс работал, оба элемента находятся на странице, так почему же только сохраненный элементнайден один раз INSIDE THEN in event listener?

Я не думаю, что когда-либо сталкивался с этим ... это гоча Javascript или жасмин?Хотелось бы узнать больше об этом, чтобы избежать этого в будущем ... потратил много времени на то, чтобы почесать мне голову.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...