0

我想測試一個控制器。測試有很多依賴的角度控制器

someModule.controller('MyController', function($rootScope, $scope, dep1, dep2) { 
    ... 
    $scope.aMethod = function() { 
    ... 
    } 
    function bMethod() { 
    ... 
    } 
    ... 
}]); 

而且我確定我的測試是這樣的:

beforeEach(inject(function ($controller, $rootScope) { 
    scope = $rootScope.$new(); 
console.log($controller); 
    MyController = $controller('MyController', { 
$rootScope : $rootScope, 
$scope: scope 
    }); 
console.log('Some debug message'); 
    console.log(MyController); 
    })); 

而且我得到這樣的輸出:

LOG: function (expression, locals, later, ident) { ... } 
LOG: 'Some debug message' 
LOG: {} 

即使我把dep1dep2我得到相同的結果。因此,scoperootScope必須存在,否則在運行時出現錯誤。

我不確定爲什麼這不起作用,因爲最後一個輸出是空的,所以控制器中沒有任何功能,這是錯誤的。

我想測試bMethod作爲最低限度,但它似乎沒有正確創建我的控制器。

+0

「我有兩個我補充說,這就是爲什麼他們在那裏」 ......對不起,我不知道我理解這個問題。你能更清楚地陳述它嗎? – mgilson

+0

你嘗試了什麼? –

+0

@GonzaloPincheiraArancibia - 我添加了更多細節。基本上在beforeEach MyController對象沒有屬性或功能。 –

回答

1

bMethod它沒有連接到scope和既不this變量,因此它不是在測試中使用。有兩種方法來添加方法測試:

$scope.bMethod = bMethod; //Attached to scope 
this.bMethod = bMethod; //Attached to controller 

在你的描述塊,你打印MyController。這是控制器的一個實例。如果您想獲得示例中提供的方法,請打印scope,您將看到一種方法。

檢查這個codepen - >http://codepen.io/gpincheiraa/pen/WwXGxV

1

控制器實例上沒有屬性,因爲它們沒有定義。

這是一個已經得到了aMethod屬性,而不是MyControllerscope對象:

expect(scope.aMethod).toBe(jasmine.any(Function)); 
相關問題