2016-01-26 2 views
1

У меня есть проблемы со следующим исходным кодом и соответствующий блок-Test:Устранены Обещания внутри AngularJS Unit-тест не работает с Жасмин spyOn

Источник:

public laufeVorwaertsUndZurueck(laenge:number):ng.IPromise<any>{ 
return this.ev3DifferentialPilotAdapterService.run(laenge) 
    .then((response:any)=> { 
     return this.ev3DifferentialPilotAdapterService.rotate(180); 
    }) 
    .then((response:any)=> { 
     return this.ev3DifferentialPilotAdapterService.run(laenge); 
    }) 
    .then((response:any)=> { 
     return this.ev3DifferentialPilotAdapterService.rotate(180); 
    }); 
    console.log("done"); 
} 

Unit Test:

it("laufe 60cm vorwärts und laufe wieder zurück",() =>{ 
    var promise = qService.resolve("resolved"); 
    console.log(promise); 
    spyOn(ev3DifferentialPilotAdapterService, "run").and.returnValue(promise); 
    spyOn(ev3DifferentialPilotAdapterService, "rotate").and.returnValue(promise); 

    baseBallAktionenService.laufeVorwaertsUndZurueck(60); 
    expect(ev3DifferentialPilotAdapterService.run).toHaveBeenCalledWith(60); 
    expect(ev3DifferentialPilotAdapterService.run).toHaveBeenCalledTimes(2); 
    expect(ev3DifferentialPilotAdapterService.rotate).toHaveBeenCalledWith(180); 
    expect(ev3DifferentialPilotAdapterService.rotate).toHaveBeenCalledTimes(2); 
}) 

Даже жесткий я проходил в разрешен объект обещания, функции обратного вызова внутри метода . Then никогда не вызываются. Источник отлично работает при нормальной работе, но ведет себя неправильно, когда выполняется внутри Unit-теста с использованием jasmine's spyOn.

ответ

2

Использовать $ digest после решения обещания.

смотри ниже ..

it("laufe 60cm vorwärts und laufe wieder zurück",() =>{ 
    spyOn(ev3DifferentialPilotAdapterService, "run").and.returnValue(promise); 
    spyOn(ev3DifferentialPilotAdapterService, "rotate").and.returnValue(promise); 

    baseBallAktionenService.laufeVorwaertsUndZurueck(60); 

    var promise = qService.resolve("resolved"); 
    $scope.$digest(); 

    expect(ev3DifferentialPilotAdapterService.run).toHaveBeenCalledWith(60); 
    expect(ev3DifferentialPilotAdapterService.run).toHaveBeenCalledTimes(2); 
    expect(ev3DifferentialPilotAdapterService.rotate).toHaveBeenCalledWith(180); 
    expect(ev3DifferentialPilotAdapterService.rotate).toHaveBeenCalledTimes(2); 
}) 
+0

Спасибо, это работает. Не могли бы вы рассказать мне, почему, пожалуйста? Есть ли альтернатива? Мы не хотим вызывать $ scope. $ Digest во всех наших тестовых спецификациях. – KayO

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