【发布时间】:2015-02-24 04:47:20
【问题描述】:
您好,我想知道是否有人可以告诉我如何在 Angular 和 jasmine 2 的模拟测试中测试回调结果。我们有一个服务,它的调用只返回一些数据,如下所示:
var getStuff = function (id) {
return $http.get("url/" + id)
.then(function (response) {
return response.data;
});
};
在我们的控制器中,我们在启动时调用此服务:
angular.module('controllers').controller("myController", ['$scope', 'service', function ($scope, service) {
var onGetStuff = function(data) {
//do something with the result here
}
$scope.getItems = function() {
service.getStuff(1).then(onGetStuff);
}
$scope.getItems();
}]);
然后我正在运行我的测试(稍后将发布代码,但从未调用过 onGetStuff,我似乎无法弄清楚原因。这是测试代码:
//includes here
describe('Controller: Applicant Controller', function () {
var controller, $q, $scope, mockService, deferred, $rootScope;
beforeEach(module("controllers"));
beforeEach(function() {
mockService = {
getStuff: function (id) {
deferred = $q.defer();
deferred.resolve({somestuff: 1});
return deferred.promise;
}
};
spyOn(mockService, 'getStuff').and.callThrough();
});
beforeEach(inject(function ($rootScope, $controller, _$q_) {
$scope = $rootScope.$new();
$q = _$q_;
controller = $controller('myController', {
$scope: $scope,
service: mockService
});
}));
it("it should work", function () {
debugger;
});
});
如果我在 chrome 中单步调试调试器,模拟服务会被调用,但我的控制器中的“onGetStuff”调用从未被调用过,有人能找出原因吗?
谢谢 莫西。
【问题讨论】: