2015-07-30 3 views
2

Я рассмотрел несколько других вопросов, связанных с этим в Stackoverflow, но я все еще не могу решить свою проблему. Независимо от того, что я, кажется, делаю, кажется, что либо Meteor.call не вызывается, либо если я могу заставить его быть вызванным (например, в примере кода ниже), независимо от того, для чего установлен jasmine.DEFAULT_TIMEOUT_INTERVAL, I продолжать получать следующее сообщение об ошибке:Проверка функции async с Jasmine in Meteor

Error: Timeout - Async callback was not invoked within timeout specified by jasmine.DEFAULT_TIMEOUT_INTERVAL.

Это то, что мой жасмин тест выглядит следующим образом:

it("Should be created and not assigned to anyone", function(done) { 
    jasmine.DEFAULT_TIMEOUT_INTERVAL = 5000000; 

    // Confirm that the User Has Logged in 
    expect(Meteor.userId()).not.toBeNull(); 

    var contact = null; 
    var text = "This is a testing task"; 
    spyOn(Tasks, "insert"); 
    spyOn(Meteor, "call"); 

    Meteor.call('addTask', contact, text, function(error, result) { 
     expect(error).toBeUndefined(); 
     expect(result).not.toBeNull(); 
     done(); 
    }); 

    expect(Meteor.call).toHaveBeenCalled(); 

    }); 

}); 

И моя функция AddTask выглядит следующим образом:

Meteor.methods({ 

    addTask: function (contact, text) { 
    ... // addTask Code, removed for brevity 
    }, 
}); 

Iv застрял на этом в течение недель, любая помощь, которую любой может предоставить, будет очень полезной.

ответ

2

Ожидания внутри hander никогда не выполняются, потому что Жасмин не вызывает оригинальный метод .call(). Чтобы заставить его работать, вместо spyOn(Meteor, "call"); вы должны написать spyOn(Meteor, "call").and.callThrough();, который вызовет оригинального обработчика после выполнения логики шпионажа Jasmine.

+0

Ничего себе. Это сработало отлично. Функция теперь выдает ошибку, но, по крайней мере, ожидания внутри обработчика НАКОНЕЧНО ПРИЗЫВАЮТСЯ! Спасибо, сэр! – Salman

+0

Не могли бы вы объяснить мне, почему мы когда-нибудь будем использовать только 'spyOn (Meteor,« call »)' и не хотим вызыватьThrough? – Salman

+0

Иногда (на самом деле, в большинстве случаев, я думаю) люди хотят проверить, только если был вызван какой-то метод, или проверить, сколько раз он был вызван, они сами тестируют сам метод с различными тестами. –

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