كيفية اختبار الطريقة التي يتم تمريرها إلى وحدة تحكم التوجيه
-
20-12-2019 - |
سؤال
لدي طريقة تم تعريفها في وحدة التحكم.يتم تمرير هذه الطريقة إلى توجيه مخصص له نطاق معزول.كيف يمكنني اختبار تنفيذ $scope.search
بشكل صحيح؟
الإكمال التلقائيCtrl
$scope.query = function (term) {
// some async stuff
};
نموذج
<div ng-controller="AutocompleteCtrl">
<div typeahead data-search="query(term)"></div>
</div>
التوجيه (مقتطف)
return {
controller: 'AutocompleteDirectiveCtrl',
scope: {
search: '&'
}
}
الإكمال التلقائي التوجيهيCtrl
$scope.query = function (term) {
if (term.length > ($scope.minChars - 1)) {
$scope.search({term: term});
}
};
اختبار الوحدة
describe('Autocomplete AutocompleteDirectiveCtrl', function () {
var $scope, $window;
beforeEach(module('myApp'));
beforeEach(module(function ($provide) {
$window = {
location: {},
document: window.document
};
// We register our new $window instead of the old
$provide.constant('$window', $window);
}));
beforeEach(inject(function ($rootScope, $controller) {
$scope = $rootScope.$new();
$controller('AutocompleteDirectiveCtrl', {$scope: $scope});
}));
describe('Ducktyping', function () {
it('should contain a submit method', function () {
expect($scope.submit).toBeDefined();
});
});
describe('Controller Functionality', function () {
it('should return false if a submit request has no term set', function () {
expect($scope.submit()).toEqual(false);
});
it('should redirect to search-results page if a term is present', function () {
$scope.action = 'search-results.html';
$scope.submit('mySearchTerm');
expect($window.location.href).toBe('search-results.html/products/mySearchTerm');
});
it('should do a searchquery if term length is equal or longer then min-chars', function () {
$scope.minChars = 3;
$scope.query('myTerm');
});
});
});
سجل
TypeError: 'undefined' is not a function (evaluating '$scope.search({term: term})')
المحلول
اتضح أنها كانت سهلة.كان علي فقط أن أسخر من الطريقة المطلوبة.
it('should do a searchquery if term length is equal or bigger then min-chars', function () {
$scope.minChars = 3;
$scope.search = function (term) {
return term;
};
spyOn($scope, 'search');
$scope.query('bes');
expect($scope.search).toHaveBeenCalledWith({term: 'bes'});
});
لا تنتمي إلى StackOverflow