Жасмин шпионы callThrough и callFake

У меня есть сценарий, по которому я хочу вызвать done() в beforeEach после вызова обратного вызова.

Я попытался сделать это следующим образом:

spyOn(scope, 'onAdmin').and.callThrough().and.callFake(function(){done()})

Но я не уверен, что получаю правильное поведение. По сути, я хочу, чтобы иметь возможность вызвать done() после каждого обратного вызова, делая то, что он делает.

ОБНОВЛЕНИЕ: решение обходного решения

scope.onAdminBackup = scope.onAdmin;
spyOn(scope, 'onAdmin').and.callFake(function(admin)  {

 scope.onAdminBackup();
 done() ;

})  

Ответ 1

Я никогда не связывал эти функции вместе, потому что, на мой взгляд, они, похоже, делают обратное. Вы говорите, когда я вызываю этот метод -onAdmin - в области вызовите его как обычно. Это то, что предоставляет нам метод callThrough jasmine.

Но тогда вы цепляетесь по методу callFake, а затем вы говорите, но на самом деле не называете его, вместо этого называете эту фальшивую функцию - очень противоречивой.

Если вы хотите вызвать шпиона в методе onAdmin, и вместо того, чтобы его уволили, вы хотите, чтобы он делал что-то еще - что-то насмехалось - затем используйте .and.callFake(fn). Также учтите, например, что @stefan выше сказал - не вызывайте функцию - callFake просто хочет функцию как параметр, она сама позаботится о ее вызове.

Это может быть больше в соответствии с тем, что вы ищете, если не показать нам еще какой-нибудь код.

spyOn(scope, 'onAdmin')and.callFake(done)

Ответ 2

вы звоните, сделав сразу, когда вы пишете done() попробуйте передать в качестве значения:

spyOn(scope, 'onAdmin').and.callThrough().and.callFake(done)