2013-05-13 6 views
0

Я только начинаю с тестирования единицы жасмина и сталкиваюсь с некоторыми проблемами при тестировании своих асинхронных вызовов.Jasmine async call problem

У меня есть вызов ajax, который я пытаюсь проверить, и я попробовал его в консоли, чтобы я знал, что он работает, как я этого хочу. Я думаю, что я тестирую то же самое, что и в консоли, но могу ошибаться.

Вот консоль:

> mg = new MandellMVC() 
MandellMVC {getSessionId: function, setSessionId: function, isValidGetFunction: function, getURLPrefix: function, setURLPrefix: function…} 
> mg.setUseLocalData(true); 
true 
> var log = new Log(73936780) 
undefined 
> log.setLogType('Proc') 
true 
> log.fetch(mg, function(){console.log('done');}) 
true 
done 

локальные данные только изменения между отправкой запроса HTTP на внешнем сервере, или загрузки данных из локального файла.

тест код жасмин здесь:

describe("Log Model", function() { 

    var mg = new MandellMVC(); 
    mg.setUseLocalData(true); 

    var log; 

    beforeEach(function() { 
     log = new Log(73936780); 
    }); 

    describe("function fetch", function() { 
     it("returns false if log type is invalid", function() { 
      expect(log.fetch(mg, function(){})).toBeFalsy(); 
     }); 

     // Not sure why this needs to be here too? 
     log = new Log(73936780); 
     log.setLogType('Proc'); 

     it("should make a real ajax request", function() { 
      var callback = jasmine.createSpy(); 
      log.fetch(mg, callback); 
      waitsFor(function() { 
       return callback.callCount > 0; 
      }); 
      runs(function() { 
       expect(callback).toHaveBeenCalled(); 
      }); 
     }); 
    }); 
}); 

Первый тест проходит. Но затем вторая дает ошибку timeout: timed out after 5000 msec waiting for something to happen. Я попытался следовать учебнику, но, видимо, не очень хорошо.

Спасибо, любая помощь очень ценится!

+1

Что Инструменты разработчика (или firebug) говорят о запросе AJAX? Успешно ли это? Кроме того, вы должны перемещать 'beforeEach' внутри внутреннего' описания', потому что он работает только для одного уровня (см. [Docs] (http://pivotal.github.io/jasmine/#section-Setup_and_Teardown)) – scriptin

+0

'beforeEach' и 'afterEach' каскад до вложенных описаний просто отлично. См. Следующий раздел в документах, которые вы связали – Gregg

ответ

1

я думаю, что вы путаете декларацию log = new Log(73936780)

правильный код должен быть

describe("Log Model", function() { 
    var mg; 
    var log; 

    beforeEach(function() { 
     mg = new MandellMVC(); 
     mg.setUseLocalData(true); 

     log = new Log(73936780); 
     log.setLogType('Proc'); 
    }); 

    afterEach(function() { 
     delete mg; 
     delete log; 
    }); 

    describe("function fetch", function() { 
     it("returns false if log type is invalid", function() { 
      expect(log.fetch(mg, function(){})).toBeFalsy(); 
     }); 

     it("should make a real ajax request", function() { 
      var callback = jasmine.createSpy(); 
      log.fetch(mg, callback); 
      waitsFor(function() { 
       return callback.callCount > 0; 
      }); 
      runs(function() { 
       expect(callback).toHaveBeenCalled(); 
      }); 
     }); 
    }); 
}); 

Кроме того, вы должны также проверить в поджигатель, если запрос посылается и ответ получен правильно