2014-09-01 7 views
2

Я использую жасмин 2.0 для тестирования, и я слежу за jQuery ajax и возвращая обещание. В методе функции done() displayContent() не вызывается, но отображается сообщение консоли над ним. Где я иду не так?Функция обратного вызова не вызывается в тестовом коде жасмина

test.js

it(..., function() { 
    var data = {"name" : "John Doe"}; 
    spyOn($, 'ajax').and.callFake(function (req) { 
    var d = $.Deferred(); 
    d.resolve(data); 
    return d.promise(); 
    }); 

    app.doSomething(); 
    expect(app.doSomething).toHaveBeenCalled(); 
}) 

app.js

app.getData = function() { 
    var jsonData = app.loadEmpData(); //gets replaced by spy and returns resolve(data); 
    jsonData.done(function(data) { 
     console.log("shows up in the console"); 
     app.displayContent(data); // doesn't get called 
    }); 
    jsonData.fail(function(){ 
     console.log("error loading data"); 
    }); 
} 

app.loadEmpData = function() { 
    return $.getJSON("/employee.json"); 
} 

app.displayContent = function() { 
    console.log("some content"); 
} 

app.doSomething = function() { 
    app.getData(); 
} 

ответ

1

Spy на displayContent() и проверить, если он называется или нет. Я изменил ваш тест и вызвал displayContent(). Замените этот код и проверьте.

it("some test", function() { 
    var data = {"name" : "John Doe"}; 
    spyOn($, 'ajax').and.callFake(function (req) { 
     var d = $.Deferred(); 
     d.resolve(data); 
     return d.promise(); 
    }); 
    spyOn(app, 'displayContent').and.callThrough(); 
    app.getData(); 
    expect(app.displayContent).toHaveBeenCalled(); 
}); 

В Jasmine 2.0 and.callThrough(); делегирует фактической реализации displayContent().

2

Два возможных варианта всплывают в моей голове:

1) В некоторых случаях вы должны вызвать $ scope.apply() в тестовом коде, чтобы гарантировать то функция Promise, выполняется.

2) Вы можете использовать функцию сделано(), как это:

it('', function(done){ 
    $promise.then(function(){ 
    expect(...); 
    done(); 
    }) 
}); 

 Смежные вопросы

  • Нет связанных вопросов^_^