我最近更新的角度,从1.5我的应用程序1.6.3和开始变得茉莉花单元测试失败(与PhantomJS)围绕我已经写了基于承诺的代码:
可能未处理的拒绝:未定义抛出
阅读我周围看到,接受的解决办法是链条。那么()与.catch()块来妥善地处理拒绝。
我已经为我测试来证明这一点得到过去它做错误的我源文件中的一个做到了这一点。
然而,现在已经发现了另一个问题,其中的预期时,承诺拒绝被称为在我的代码我测试不再传递。
这是我想测试功能(后添加所需的catch块)
public deleteSomething = (thing) => {
return this.UserMessages.buildConfirmDialog().then(() => {
this.someService.remove(thing)
.then(() => {
this.UserMessages.showToast('Something deleted');
})
.catch((error) => {
//handle error
});
})
.catch((error) => {
//handle error
});
}
这里是测试:
var thing = {foo: 'bar'},
deferredRemove,
deferredConfirm,
//Mock service below injected into controller later on before test are run
UserMessages = {
buildConfirmDialog: jasmine.createSpy('buildConfirmDialog').and.callFake(function() {
deferredConfirm = $q.defer();
return deferredConfirm.promise.catch(angular.noop);
})
};
//Inject and controller setup here...
describe('When deleting something', function() {
beforeEach(function() {
deferredRemove = $q.defer();
spyOn(someService, 'remove').and.returnValue(deferredRemove.promise.catch(angular.noop));
});
describe('and the user confirms the deletion', function() {
beforeEach(function() {
ctrl.deleteSomething(thing);
deferredConfirm.resolve();
deferredRemove.resolve();
$rootScope.$apply();
});
it('should call remove on someService', function() {
console.log('someService.remove.calls = ' + someService.remove.calls.count());
expect(someService.remove).toHaveBeenCalled();
});
});
describe('and the user cancels the deletion', function() {
beforeEach(function() {
someService.remove.calls.reset();
vm.deleteSomething(thing);
deferredConfirm.reject({});
$rootScope.$apply();
});
it('should not call remove on someService', function() {
console.log('someService.remove.calls = ' + someService.remove.calls.count());
expect(someService.remove.calls.count()).toEqual(0);
});
});
});
我没有了.catch(angular.noop)
在之前的部分升级到1.6.3,并看到一些帖子暗示要做到这一点,为了让测试开心,这让过去在未处理的废品肯定有助于我我试运行。
我现在面临的问题是,对于拒绝测试规范,不应该有我的服务给remove函数调用制成,所以电话的数量应该是零,但它不断出来为1。我说行重置在我的测试呼叫,以确保它不是先前的测试贡献(我知道电话是为了测试之间进行复位)。
该测试运行得很好,当我是在1.5,所以这是一些我的代码\测试编写不与1.6.x的变化很好地玩的方式
有人能阐明什么可怎么回事,请一些轻?
谢谢