[英]Unit testing logic inside promise callback
我有一個正在使用茉莉花測試的ES6 / Aurelia應用程序。 我嘗試測試的方法如下所示:
update() {
let vm = this;
vm.getData()
.then((response) => {
vm.processData(response);
});
}
其中this.getData
是一個返回諾言的函數。
我的規格文件看起來像這樣:
describe('my service update function', () => {
it('it will call the other functions', () => {
myService = new MyService();
spyOn(myService, 'getData').and.callFake(function() {
return new Promise((resolve) => { resolve(); });
});
spyOn(myService, 'processData').and.callFake(function() { return; });
myService.update();
// this one passes
expect(myService.getData).toHaveBeenCalled();
// this one fails
expect(myService.processData).toHaveBeenCalled();
});
});
我知道為什么會失敗-承諾是異步的,並且在達到期望時尚未解決。
我如何才能將承諾從測試中分解出來,以便可以在回調中測試代碼?
失敗的jsfiddle: http : //jsfiddle.net/yammerade/2aap5u37/6/
我通過返回一個行為類似於承諾而不是實際承諾的對象來解決問題
describe('my service update function', () => {
it('it will call the other functions', () => {
myService = new MyService();
spyOn(myService, 'getData').and.returnValue({
then(callback) {
callback();
}
});
spyOn(myService, 'processData').and.callFake(function() { return; });
myService.update();
// this one passes
expect(myService.getData).toHaveBeenCalled();
// this one fails
expect(myService.processData).toHaveBeenCalled();
});
});
在這里提琴: http : //jsfiddle.net/yammerade/9rLrzszm/2/
這樣做有什么問題嗎?
it((done) => {
// call done, when you are done
spyOn(myService, 'processData').and.callFake(function() {
expect(myService.processData).toHaveBeenCalled();
done();
});
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.