单元测试控制器中的服务依赖性

时间:2015-11-14 03:45:26

标签: javascript angularjs unit-testing

学习如何前端测试,但不能得到承诺的工作。我有一个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);
  });    

});

0 个答案:

没有答案
相关问题