describe('uiDate', function() { // chargement du module beforeEach(module("myApp")); // vérification de l'affection de la date provenant du modèle au datepicker it('should be able to get the date from the model', function() { // injection du service $compile et du $rootScope return inject(function($compile, $rootScope) { // création d'un scope fils var scope = $rootScope.$new(); // creation d'une date pour test var aDate = new Date(2012, 6, 10); // compilation de la directive var element = $compile("<input ui-date ng-model='x'></input>")(scope); // affectation de la date de test au scope scope.$apply(function() { return scope.x = aDate; }); // test si le datepicker affiche bien la date de test return expect(element.datepicker('getDate')).toEqual(aDate); }); }); // vérification de l'affectation de la date sélectionnée dans le datepicker dans le modèle it('should put the date in the model', function() { // injection du service $compile et du $rootScope return inject(function($compile, $rootScope) { // création d'un scope fils var scope = $rootScope.$new(); // creation d'une date pour test var aDate = new Date(2012, 6, 10); // compilation de la directive var element = $compile("<input ui-date ng-model='x'></input>")(scope); // simulation d'une sélection dans le datepicker element.datepicker('setDate', aDate); $.datepicker._selectDate(element); // vérification que le modèle contient bien la date de test return expect(scope.x).toEqual(aDate); }); }); }); var myApp = angular.module('myApp', []); myApp.directive('uiDate', function() { return { require: '?ngModel', link: function($scope, element, attrs, controller) { var originalRender, updateModel, usersOnSelectHandler; if ($scope.uiDate == null) $scope.uiDate = {}; if (controller != null) { updateModel = function(value, picker) { return $scope.$apply(function() { return controller.$setViewValue(element.datepicker("getDate")); }); }; if ($scope.uiDate.onSelect != null) { usersOnSelectHandler = $scope.uiDate.onSelect; $scope.uiDate.onSelect = function(value, picker) { updateModel(value); return usersOnSelectHandler(value, picker); }; } else { $scope.uiDate.onSelect = updateModel; } originalRender = controller.$render; controller.$render = function() { originalRender(); return element.datepicker("setDate", controller.$viewValue); }; } return element.datepicker($scope.uiDate); } }; }); // KICK OFF JASMINE var jasmineEnv = jasmine.getEnv(); var trivialReporter = new jasmine.TrivialReporter(); jasmineEnv.addReporter(trivialReporter); jasmineEnv.specFilter = function(spec) { return trivialReporter.specFilter(spec); }; jasmineEnv.execute();