Angular 在模拟茉莉花测试中使用 then 回调
Angular with then callback in mock jasmine test
嗨,我想知道是否有人可以告诉我如何在 angular 和 jasmine 2 的模拟测试中测试回调结果。我们有一个服务,它的调用只是 returns一些数据,看起来像这样:
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();
}]);
然后我 运行 我的测试(稍后会 post 代码,但是从未调用过 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" 调用从未被调用,有人能找出原因吗?
谢谢
嘲讽。
创建控制器后,您需要调用 $rootScope.$apply()
以便 运行 任何 then
回调。
嗨,我想知道是否有人可以告诉我如何在 angular 和 jasmine 2 的模拟测试中测试回调结果。我们有一个服务,它的调用只是 returns一些数据,看起来像这样:
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();
}]);
然后我 运行 我的测试(稍后会 post 代码,但是从未调用过 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" 调用从未被调用,有人能找出原因吗?
谢谢 嘲讽。
创建控制器后,您需要调用 $rootScope.$apply()
以便 运行 任何 then
回调。