2014-08-28 56 views
0

我是新來angularjs和寫一個簡單的控制器的單元測試。但不知何故,它不工作。代碼去如下:我在angularjs控制器的茉莉花單元測試中做錯了什麼?

ResetPwdCtrl.js(提到只有功能我測試)

function ResetPwdCtrl($scope, $modalInstance, Employee, emp){ 
$scope.emp= emp; 
$scope.confirm = function(){ 
    Employee.sendResetPwdLink(emp.id).success(function(){ 
     $modalInstance.close(); 
    }).error(function(errorObject){ 
     $scope.alert = { 
       type: 'danger', 
       text: errorObject.statusCode 
     }; 
    }); 
}; 
}]); 

「員工」是一家工廠,sendResetPwdLink是一個靜態方法。它的單元測試是

describe("Reset pwd", function() { 
var scope, mockModalInstance, mockEmployee, emp, q, deferred, appCtrl; 

beforeEach(function() { 
    mockEmployee = { 
      id : 0, 
      sendResetPwdLink : function(theId) { 
       mockEmployee.id = theId; 
       deferred = q.defer(); 
       deferred.promise.success = function(fn) { 
        return deferred.promise.then(fn); 
       }; 
       //return deferred.promise; 

       deferred.promise.error = function(fn) { 
        return deferred.promise.fail(fn); 
       }; 
       return deferred.promise; 
      } 
     }; 

     emp = { 
      id : 10 
     }; 

     mockModalInstance = { 
      isClosed : false, 
      close : function() { 
       mockModalInstance.isClosed = true 
      } 
     }; 
}); 

beforeEach(inject(function($controller, $rootScope, $q) { 
    scope = $rootScope.$new(); 
    q = $q; 

    $controller('ResetPwdCtrl', { 
     '$scope' : scope, 
     '$modalInstance' : mockModalInstance, 
     'Employee' : mockEmployee, 
     'emp' : emp 
    }); 
})); 

it("confirm", function() { 
    scope.confirm(); 
    deferred.resolve(); 
    scope.$root.$digest(); 
    expect(mockModalInstance.isClosed).toEqual(true); 
}); 

it("confirm2", function() { 
    scope.confirm(); 
    deferred.reject({errorObject:[{type: 'danger', statusCode: 401,text: statusCode}]}); 
    scope.$root.$digest(); 
}); 
}); 

在運行我收到以下錯誤測試:

復位其命令pwd確認< < <失敗! *類型錯誤! '未定義' 不是一個函數(近 '......})錯誤(函數(errorObjec ...')在resetPwdCtrl.js

復位其命令pwd CONFIRM2 < < <故障 *類型錯誤:'undefined'不是函數(接近'...})。resetPwdCtrl.js中的error(function(errorObjec ...)

我沒有得到這個錯誤online.Please幫助很多的幫助!

回答

1
describe("ResetPwdCtrl",function(){ 

var $rootScope,$modalInstance,ctrl; 

beforeEach(module('MyApp')); 
beforeEach(inject(function($injector,_Employee_,_emp_,$controller){ 

$rootScope=$injector.get('$rootScope'); 
scope=$rootScope.$new(); 
$modalInstance=$injector.get('$modalInstance'); 
ctrl=$controller(function($scope:scope){ 
}); 

})); 

it('should call the confirm()',function(){ 
scope.confirm(); 
expect(scope.alert.type).toEqual('danger'); 
}); 
}); 

如果scope.alert.type未定義,請聲明JSON對象。

希望這篇文章能幫助你

0

我想嘗試兩件事。有可能沒有定義q。你可以嘗試改變的mockEmployee前beforeEach定義這個...

beforeEach(inject(function($q) { //ADD INJECT 
q = $q //DEFINE q 
    mockEmployee = {...//This part looks good to me 

如果沒有幫助,這就是我在我的測試使用q。希望它能引導你走向正確的軌道。

getData = { 
     get: function (id) 
     { 
      deferred = q.defer(); 
      // Place the fake return object here 
      deferred.resolve(mockEmployee); 
      return { $promise: deferred.promise }; 
     } 
    }; 
    $rootScope.$apply(); 
0

感謝您的答覆,但它並幫助我很多:)

我檢查,我正在寫

deferred.promise.error = function (fn) { 
    return deferred.promise.fail(fn); 
}; 

錯誤情況相反,我添加以下代碼來檢查錯誤條件

deferred.promise.error = function (fn) { 
    deferred.promise.then(null, fn); 
    return deferred.promise; 
}; 

這一個工作得很好!