AngularJS 单元测试中已解决的 Promises 不适用于 Jasmine spyOn
Resolved Promises inside AngularJS Unit-Test not working with Jasmine 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");
}
单元测试:
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);
})
即使我传递了一个 resolved promise 对象,.then 方法中的回调函数也永远不会被调用。当 运行 正常时,Source 是好的,但在使用 jasmine 的 spyOn 的单元测试中执行时表现错误。
解决承诺后使用 $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);
})
我对以下源代码和相应的单元测试有疑问:
来源:
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");
}
单元测试:
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);
})
即使我传递了一个 resolved promise 对象,.then 方法中的回调函数也永远不会被调用。当 运行 正常时,Source 是好的,但在使用 jasmine 的 spyOn 的单元测试中执行时表现错误。
解决承诺后使用 $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);
})