Przeszedłem kilka tutoriali i podstawowych przykładów, ale mam problemy z pisaniem testów jednostkowych dla mojego kontrolera. Widziałem fragmenty kodu tworzące kontrolery i pozwalające na kątowe wstawianie obiektu $rootScope
, który z kolei jest używany do tworzenia nowego obiektu scope
dla kontrolera. Ale nie mogę zrozumieć, dlaczego ctrl.$scope
? jest niezdefiniowana:
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!
}));
});
skończyło się używając scope
zmienną zamiast ctrl.$scope
ale na moim pierwszym teście nie mogłem dowiedzieć się, jak testować zmienną funkcji wewnątrz mojego kontrolera jednostka:
Kontroler:
function EmployeeCtrl($scope, $http, $filter, Employee) {
var searchMatch = function (haystack, needle) {
return false;
}
}
Złamane jednostka Test:
it('should search ', function() {
expect(ctrl.searchMatch('numbers','one')).toBe(false);
});
To co mam
TypeError: Object # has no method 'searchMatch'
Jak można przetestować tę funkcję? W celu obejścia tego problemu przeniosłem moją metodę do zakresu $, aby móc przetestować pod kątem scope.searchMatch
, ale zastanawiałem się, czy to jedyny sposób.
Wreszcie, na moich testach pojawia się $filter
jest również niezdefiniowany, jak to wstrzyknąć? Próbowałem to, ale nie działa:
ctrl = $controller('EmployeeCtrl', { $scope: scope, $filter: $filter });
Dzięki
Aktualizacja: Sposób wspomniano powyżej, aby wstrzyknąć $ filtr działa dobrze.
Mój test jaśminowy przełamuje metodę iniekcji. Nie znaleziono. Czego mi brakuje. kątowa nie jest pusta. Mam test, który przechodzi, który sprawdza, czy jest załadowany. – Hcabnettek