0
我有一個控制器使用服務,解析一個承諾然後設置一個變量。 我想測試變量是否已經設置,我該如何做?
Service.js
angular
.module('myModule')
.service('MyService',['$resource',function($resource){
var r = $resource('/users/:id',{id:'@id'});
this.post = function(_user){
return (new r(_user)).$save()
}
}])
控制器
angular
.module('myModule')
.controller('myCtrl', ['MyService',function(MyService){
var vm = this;
vm.value = 0;
vm.post = function(_user){
MyService.post(_user).then(function(){
vm.value = 1;
});
};
}])
controller_spec
describe('Test Controller',function(){
beforeEach(module('myModule'));
beforeEach(inject(function($controller, MyService){
this.ctrl = $controller('myCtrl');
}))
it('after save value is 1',function(){
this.ctrl.post({name: 'chuck'});
//Always this.ctrl.value it's equal to 0
expect(this.ctrl.value).toBeEqual(1);
});
});
感謝哥們!這對我有效。 –
爲什麼'then'方法執行時,我的值更新,當我使用範圍。$ apply()方法??這是因爲'then'方法提供的函數仍在等待'$ digest'進程?如果有人幫助我理解這一點,我會非常優雅。 –
你需要$ scope。$ apply(),告訴AngularJS剛剛發生了異步事件。在這種情況下,你只是解決了一個承諾。 – sdfacre