在Karma-Jasmine中运行angularJS单元测试用例时出错

时间:2016-03-10 04:34:14

标签: angularjs unit-testing jasmine karma-runner

MainCtrl.js

var app = angular.module('mailApp');
  app.controller('MainCtrl', ['$scope','$http',function($scope,$http) {
  $scope.sortType     = 'date'; // set the default sort type
  $scope.sortReverse  = false;  // set the default sort order
  $scope.inboxDetails = [];

  $scope.loadInboxData = function(a){
      if(a==1){
         $http.get('inboxData.json')
       .then(function(response){
          $scope.inboxData = response.data;          
    });}
      else if(a==2){
         $http.get('inboxData1.json')
       .then(function(response){
          $scope.inboxData = response.data;          
    });}

  }


//-----------------------------------------------

testMainCtrl.js

'use strict';

describe('MainCtrl', function () {
 var $controller;

 beforeEach(module('mailApp'));

     beforeEach(inject(function(_$controller_){
       $controller = _$controller_;
    }));

    //Test cases to verify Inbox Data

    describe('$scope.loadInboxData', function () {

        it('Inbox data is called', function () {
            var $scope = {};
            var controller = $controller('MainCtrl', {$scope: $scope});

            $scope.inboxData = [{"subject": "Angular Example 11", "date": "3/8/2016", "to": "test1", "from":"abcd1","details":"Test Message 1" },{ "subject": "Angular Example 21", "date": "3/8/2016", "to": "test2", "from":"abcd2","details":"Test Message 2" },{ "subject": "Angular Example 31", "date": "4/8/2016", "to": "test3", "from":"abcd3","details":"Test Message 3" },{ "subject": "Angular Example 41", "date": "5/8/2016", "to": "test3", "from":"abcd4","details":"Test Message 4" }];

            var a=$scope.loadInboxData(1);
            expect($scope.inboxData).toEqual(a);

        }); 
    });


});

//------------------------------------------------

错误:

  

Chrome 48.0.2564(Windows 10 0.0.0)MainCtrl $ scope.loadInboxData   收件箱数据称为FAILED

预期

[  
   Object(   {  
      subject:'Angular Example 11',
      date:'3/8/2016',
      to:'test1',
      from:'abcd1',
      details:'Test Message 1'
   }   ),
   Object(   {  
      subject:'Angular Example 21',
      date:'3/8/2016',
      to:'test2',
      from:'abcd2',
      details:'Test Message 2'
   }   ),
   Object(   {  
      subject:'Angular Example 31',
      date:'4/8/2016',
      to:'test3',
      from:'abcd3',
      details:'Test Message 3'
   }   ),
   Object(   {  
      subject:'Angular Example 41',
      date:'5/8/2016',
      to:'test3',
      from:'abcd4',
      details:'Test Message 4'
   }   )
] 

等于未定义。

2 个答案:

答案 0 :(得分:0)

您在测试中对$ http有很强的依赖性。您应该模拟$ http服务的返回值。

查看文档https://docs.angularjs.org/api/ngMock/service/$httpBackend

答案 1 :(得分:0)

这可能对你有所帮助,$ httpBackend是模拟$ http

'use strict';

describe('MainCtrl', function () {
 var $controller,$httpBackend;

 beforeEach(module('mailApp'));

     beforeEach(inject(function(_$controller_){
       $controller = _$controller_;
    }));
    beforeEach(inject(function($injector) {

      $httpBackend = $injector.get('$httpBackend');

    }));

    //Test cases to verify Inbox Data

    describe('$scope.loadInboxData', function () {

        it('Inbox data is called', function () {
            var $scope = {};
            var controller = $controller('MainCtrl', {$scope: $scope});

            $scope.inboxData = [{"subject": "Angular Example 11", "date": "3/8/2016", "to": "test1", "from":"abcd1","details":"Test Message 1" },{ "subject": "Angular Example 21", "date": "3/8/2016", "to": "test2", "from":"abcd2","details":"Test Message 2" },{ "subject": "Angular Example 31", "date": "4/8/2016", "to": "test3", "from":"abcd3","details":"Test Message 3" },{ "subject": "Angular Example 41", "date": "5/8/2016", "to": "test3", "from":"abcd4","details":"Test Message 4" }];
            $httpBackend.when('GET', 'inboxData.json').respond(yourjsonresponseData1);
$httpBackend.when('GET', 'inboxData2.json').respond(yourjsonresponseData2);
                var a=$scope.loadInboxData(1);
            expect($scope.inboxData).toEqual(a);

        }); 
    });


});