2015-05-19 4 views
2

Невозможно получить мою голову вокруг углового, силона и обещаний. Если мне нужно, чтобы проверить что-то вроде этого:Угловые, Синоны, обещания

myCtrl.js

angular.module('app') 
.controller('myCtrl', ($scope, dataService)=> { 

    dataService.list('location').then((lst)=> { 
     $scope.list = lst; 
    }); 

}); 

myCtrl-spec.js

describe('testing controller',()=> { 

    var locations = ['A','B','C'], dataService, $scope; 

    beforeEach(module('app')); 

    beforeEach(inject($controller, $rootScope, _dataService_, $q) => { 
     dataService = _dataService_; 
     $scope = $rootScope.$new(); 
     let lstStub = sinon.stub(dataService,'list'); 
     let promise = $q.defer(); 
     lstStub.withArgs('location').returns(promise); 
    })); 


    it('gets locations',()=> { 
     $controller('myCtrl', { $scope, dataService }); 
     $scope.$digest(); 
     expect($scope.list).to.be.equal(locations); 
    }) 
}) 

Как мне сказать Sinon путь обещание получает разрешенное ?

+0

Обратите внимание, что '$ q.defer()' возвращает объект '' отложен '', а не 'обещание'. Для этого вам нужно «отложить». –

ответ

4

Вы могли бы просто передать locations шпиону как разрешенное значение посыла с $q.when:

lstStub.withArgs('location').returns($q.when(locations)); 

и он должен просто работать нормально. Причина, по которой он не работает в вашем случае, заключается в том, что вы создаете обещание от отложенного объекта и никогда не разрешаете его с соответствующей стоимостью.

когда (значение); Обертывает объект, который может быть значением или (сторонним), а затем может обещать в обещание в $ q. Это полезно, когда вы имеете дело с объектом, который может или не может быть обещанием, или если обещание исходит от источника, которому нельзя доверять.

+0

Просто чтобы убедиться, что вы используете стенографические свойства ES6 только при инициализации контроллера @ '$ controller ('myCtrl', {$ scope, dataService}); иначе это приведет к синтаксической ошибке. – PSL

+0

блестящий..и работает. благодаря! – Agzam