2017-03-22 35 views
0

我試圖測試我的簡單控制器,但似乎沒有任何工作。 控制器:

userCtrlMod.controller('resetCtrl', 
    ['$scope', '$ionicPopup', '$timeout','resetPwd', 
    function($scope, $ionicPopup, $timeout, resetPwd){ 

    $scope.reset = function(){ 
    $scope.resetPopUp = $ionicPopup.show({ 
    templateUrl:'././templates/popup/reset.html', 
    scope: $scope 
    }); 
    }}]); 

我的測試文件:

describe("resetCtrl", function() { 
var $myScope, $myController, timeout; 

beforeEach(module('dbooks.userCtrl')); 

beforeEach(inject(function(
_$controller_, 
_$rootScope_, 
_$timeout_, 
$ionicPopup 
){ 
    $myController = _$controller_; 
    $myScope = _$rootScope_; 

    $myController = $controller('resetCtrl' , { 
    $scope: $myScope, 
    $resetPopUp : $ionicPopup 
    }); 
})); 

it("should have a $scope variable", function() { 
    //console.log($myScope); 
    expect($myScope).toBeDefined(); 
});}); 

我GOOGLE了它,但我could'nt找到任何解決辦法,請有人告訴我,我做錯了。 錯誤:

Uncaught Error: [$injector:unpr] Unknown provider: $ionicPopupProvider <- $ionicPopup

Uncaught Expected undefined to be defined. at Object.

+0

你能提供完整的代碼嗎? –

+0

這一切什麼是相關測試,我試圖做 – AbirBk

+0

我可以爲你提供一個例子,是一個簡單的兩個數字加一個 –

回答

0

測試創建控制器時,你不提供所有需要的依賴。你必須提供由控制器所需的所有依存關係:

describe("resetCtrl", function() { 
    var $myScope, $myController, timeout; 

    beforeEach(module('dbooks.userCtrl')); 

    beforeEach(inject(function(
     _$controller_, 
     _$rootScope_, 
     _$timeout_, 
     $ionicPopup 
    ){ 
     $myController = _$controller_; 
     $myScope = _$rootScope_; 
     var resetPwd = { 
      someResetmethod: jasmine.createSpy('rese') 
     }; 

     $myController = $controller('resetCtrl' , { 
      $scope: $myScope, 
      $ionicPopup: $ionicPopup, 
      $timeout: _$timeout_, 
      resetPwd: resetPwd 
     }); 
    })); 

    it("should have a $scope variable", function() { 
     //console.log($myScope); 
     expect($myScope).toBeDefined(); 
    }); 

} 

請注意,你可以注入嘲笑對象的依賴關係 - 作爲方法注入上面的代碼,而不是原來的resetPwd嘲笑的對象與間諜。重要的是你必須提供你的控制器使用的所有依賴關係,並且如果你注入模擬對象,那麼這些對象當然必須包含所需的方法和屬性。

+0

謝謝你的回答,但嘗試了你告訴我,但我仍然有同樣的問題,問題甚至沒有定義範圍你認爲我想念什麼在我的代碼?它像沒有被注入 – AbirBk

+0

嗯...在測試你初始化模塊名爲'dbooks.userCtrl' - 這是模塊的名稱存儲在'userCtrlMod'變量? –

+0

@AbirBk可能還有另一個問題:您必須確保具有'$ ionicPopup'服務的模塊在測試中可用。因此,您還必須初始化定義此服務的模塊,否則此服務無法在您的測試中注入,因爲角度不知道這一點。所以,你必須添加的東西是這樣的:'beforeEach(模塊( 'nameOfModuleWithIonicPopupService'));' –