如何用sinon.js正确测试Angular的$http
、success
和error
承诺?这是我到目前为止所做的(全部用coffeescript):
drive: (vehicle) ->
$http.post '/user/signin', vehicle
.success ((data) ->
# do stuff
return data
).error
throw Error (error)
<<h3>控制器街道/h3>$scope.drive = (vehicle) ->
$scope.data = Autobahn.drive(vehicle)
单元测试w. Sinon
it 'should test $http callbacks', ->
sinon.stub($scope, 'drive').yieldsTo 'success', callBackMockData
$scope.drive vehicle, (data) ->
expect($scope.data).to.be(callBackMockData)
return
return
结果TypeError: 'undefined' is not a function (evaluating '(function(data) {
return data;
}).error(function(data) {
throw Error(error);
})')
也许存根在这里不是正确的方法,因为我想一次真正测试控制器和服务。我们如何测试Angular的$http承诺?官方文档使用httpBackEnd,但没有提供如何测试$http回调链的详细信息。
不要使用$http
的success
和error
承诺。$http
本身就是一个承诺。使用.then()
.
参见:当对返回promise的函数使用.success时,undefined不是函数