学习如何前端测试,但不能得到承诺的工作。我有一个PostService,它有一些使用$ q返回promise的方法。
运行我的规范,我得到“GettingTypeError:'undefined'不是一个对象(评估'spyOn(PostService,'show')。and.returnValue')”
angular.module('postmunkApp')
.controller('PostCtrl', function ($scope, $http, socket, $stateParams, PostService) {
PostService
.show($stateParams.postId)
.then(function(post) {
$scope.post = post;
});
$scope.savePost = function() {
PostService
.update({id: $stateParams.postId, title: $scope.post.title, body: $scope.post.body})
.then(function(data) {
console.log(data);
})
}
$scope.deletePost = function(post) {
PostService
.destroy(post)
.then(function(data) {
console.log(data);
});
};
});
功能
describe('Controller: PostCtrl', function() {
var PostCtrl, $httpBackend, $q, $scope, deferred, PostServiceSpy, PostService;
beforeEach(module('postmunkApp'));
beforeEach(module('socketMock'));
beforeEach(inject(function($controller, _$q_, _$rootScope_, _PostService_) {
$q = _$q_;
$scope = _$rootScope_.$new();
PostService = _PostService_;
deferred = _$q_.defer();
spyOn(PostService, 'show').and.returnValue(deferred.promise);
$controller('PostCtrl', {$scope: $scope, PostService: PostService});
}));
it('should resolve promise', function () {
deferred.resolve([{ title: 'This is a title' }, {title: 'This is another title'}]);
$scope.$apply();
expect($scope.post).not.toBe(undefined);
});
});