我已經通過了一些教程和基本示例,但是我很難爲我的控制器編寫單元測試。我見過代碼片段實例化控制器,並讓角度注入對象,而對象又用於爲控制器創建一個新的對象scope
。但我想不通爲什麼ctrl.$scope
? 未定義:
describe('EmployeeCtrl', function() {
var scope, ctrl, $httpBackend;
beforeEach(inject(function (_$httpBackend_, $rootScope, $controller, $filter) {
$httpBackend = _$httpBackend_;
scope = $rootScope.$new();
ctrl = $controller('EmployeeCtrl', { $scope: scope});
expect(ctrl).not.toBeUndefined();
expect(scope).not.toBeUndefined(); //<-- PASS!
expect(ctrl.$scope).not.toBeUndefined(); //<-- FAIL!
}));
});
我結束了使用scope
變量而不是ctrl.$scope
但當時我的第一次測試中,我無法弄清楚如何單元測試函數變量我的控制器內:
控制器:
function EmployeeCtrl($scope, $http, $filter, Employee) {
var searchMatch = function (haystack, needle) {
return false;
}
}
破碎部測試:
it('should search ', function() {
expect(ctrl.searchMatch('numbers','one')).toBe(false);
});
這是我得到
TypeError: Object # has no method 'searchMatch'
你怎麼測試功能?作爲一種解決方法,我將我的方法移至$ scope,所以我可以測試scope.searchMatch
,但我想知道這是否唯一方法。
最後,在我的測試中出現$filter
也未定義,你怎麼注入它?我試過,但沒有奏效:
ctrl = $controller('EmployeeCtrl', { $scope: scope, $filter: $filter });
感謝
更新: 上述注入$過濾器的方法工作得很好。
我的茉莉花測試打破了注射法。它沒有被發現。我錯過了什麼。角度不爲空。我有一個測試通過驗證它的加載。 – Hcabnettek