Значения теста Jasmine, возвращенные Ajax во время успеха

У меня есть функция javascript, которая выполняет вызов Ajax и записывает значение, возвращаемое в элемент DOM. Я пишу модульный тест для этой функции с помощью jasmine, и я могу издеваться над запросом ajax, используя его.

Ниже приведены функциональные и модульные тесты.

myFunction(){
 ......
 ....
  $.ajax(){
     method: "GET"
     url: "/myTest"
     success: function(test){
           $("#htmlElem").html(test);
     }
  };
};

it("specifying response when you need it", function() {

  expect(jasmine.Ajax.requests.mostRecent().url).toBe("/myTest);
  ... 
  jasmine.Ajax.requests.mostRecent().response({
  "status": 200,
  "contentType": 'text/plain',
  "responseText": 'awesome response'
 });

 myFunction();
 var testVal = $("htmlElem").val();
 expect(testVal).toBe('awesome response');
});

Тестовый пример завершается ошибкой, показывая, что testVal пуст. Насколько я понимаю, это происходит из-за того, что фактический вызов ajax не был выполнен, поэтому вызов успеха также. Правильно ли я понимаю? Если это так, то как я могу проверить, что значение, возвращаемое вызовом ajax, правильно установлено для элемента html. Заранее спасибо Любой п


person user3653136    schedule 19.05.2014    source источник


Ответы (1)


Попробуйте добавить функцию обратного вызова к исходному вызову AJAX, а затем используйте асинхронную поддержку Jasmine чтобы проверить его после завершения вызова.

myFunction(done) {
  $.ajax(){
     method: "GET"
     url: "/myTest"
     success: function(test){
       $("#htmlElem").html(test);
       done();
     }
  };
};

it("specifying response when you need it", function(done) {    
  // ...
  myFunction(function() {
    var testVal = $("htmlElem").val();
    expect(testVal).toBe('awesome response');
    done();
  });     
});
person Terry    schedule 20.05.2014