在 Angular 2 个服务中测试异步 (Promise) 方法
Testing async (Promise) methods in Angular 2 Services
这是一个有趣的问题:我正在尝试测试使用 Ionic BarcodeScanner 的服务。
为了尝试测试,我有一个基于 ionic unit-testing repository 的回购协议。
我正在通过 spyOn(..).and.callFake(..)
模拟 BarcodeScanner.scan 方法
问题:当我从组件调用扫描方法时,它起作用了。当我在服务中执行完全相同的操作时,它会引发超时。
组件测试代码:
it("should be able to set a spy on the scanner and test the component", done => {
const testBC = "123456";
const spy = spyOn(TestBed.get(BarcodeScanner), "scan");
spy.and.callFake(() => {
return new Promise((resolve, reject) => {
resolve(testBC);
})
});
component.testScanner().then(res => {
expect(res).toBe(testBC);
done();
}, reason => {
expect(true).toBe(false);
done();
})
});
服务测试代码:
it("should be able to set a spy on the scanner and test the service", done => {
const testBC = "123456";
const spy = spyOn(TestBed.get(BarcodeScanner), "scan");
spy.and.callFake(() => {
return new Promise((resolve, reject) => {
resolve(testBC);
})
});
inject([TestService], (service) => {
service.testScanner().then(res => {
expect(res).not.toBe(testBC);
done()
}, reason => {
expect(true).toBe(false);
done();
})
})
});
在 Angular 2 中以这种方式测试服务是否存在任何已知问题?感谢任何帮助!
问题是没有调用注入函数。
该服务的测试代码现在如下所示:
it("should be able to set a spy on the scanner and test the service", done => {
const testBC = "123456";
const spy = spyOn(TestBed.get(BarcodeScanner), "scan");
spy.and.callFake(() => {
return new Promise((resolve, reject) => {
resolve(testBC);
})
});
inject([TestService], (service) => {
service.testScanner().then(res => {
expect(res).not.toBe(testBC);
done()
}, reason => {
expect(true).toBe(false);
done();
})
})(); //<-- do not forget these braces!!
});
这是一个有趣的问题:我正在尝试测试使用 Ionic BarcodeScanner 的服务。
为了尝试测试,我有一个基于 ionic unit-testing repository 的回购协议。
我正在通过 spyOn(..).and.callFake(..)
问题:当我从组件调用扫描方法时,它起作用了。当我在服务中执行完全相同的操作时,它会引发超时。
组件测试代码:
it("should be able to set a spy on the scanner and test the component", done => {
const testBC = "123456";
const spy = spyOn(TestBed.get(BarcodeScanner), "scan");
spy.and.callFake(() => {
return new Promise((resolve, reject) => {
resolve(testBC);
})
});
component.testScanner().then(res => {
expect(res).toBe(testBC);
done();
}, reason => {
expect(true).toBe(false);
done();
})
});
服务测试代码:
it("should be able to set a spy on the scanner and test the service", done => {
const testBC = "123456";
const spy = spyOn(TestBed.get(BarcodeScanner), "scan");
spy.and.callFake(() => {
return new Promise((resolve, reject) => {
resolve(testBC);
})
});
inject([TestService], (service) => {
service.testScanner().then(res => {
expect(res).not.toBe(testBC);
done()
}, reason => {
expect(true).toBe(false);
done();
})
})
});
在 Angular 2 中以这种方式测试服务是否存在任何已知问题?感谢任何帮助!
问题是没有调用注入函数。
该服务的测试代码现在如下所示:
it("should be able to set a spy on the scanner and test the service", done => {
const testBC = "123456";
const spy = spyOn(TestBed.get(BarcodeScanner), "scan");
spy.and.callFake(() => {
return new Promise((resolve, reject) => {
resolve(testBC);
})
});
inject([TestService], (service) => {
service.testScanner().then(res => {
expect(res).not.toBe(testBC);
done()
}, reason => {
expect(true).toBe(false);
done();
})
})(); //<-- do not forget these braces!!
});