3 votes

Tests unitaires, comment vérifier si le modèle de $uibModal existe ?

J'utilise le service $uibModal pour créer une fenêtre modale. Et je dois m'assurer que le fichier modèle existe.

(function () {
angular.module('some.module.name').factory('serviceName', function ($uibModal) {
    function open() {
        return $uibModal.open({
            templateUrl: 'path/to/template.html',
            controller: 'ControllerName',
            resolve: {
                context: function () {
                    return something;
                }
            }
        });
    }

    return {
        open: open
    };
});
})();

Je peux vérifier avec un chemin statique de cette façon :

it('should pass a config object when opens the modal window', function () {
    expectedOptions = {
       templateUrl: 'path/to/template.html',
        controller: 'ControllerName',
           resolve: {
               context: jasmine.any(Function)
           }
    };
    serviceName.open();
    expect($uibModal.open).toHaveBeenCalledWith(jasmine.objectContaining(expectedOptions));
});

Mais je devrai modifier ce test si le chemin du modèle est modifié.

Comment puis-je vérifier si la fenêtre modale reçoit un modèle existant sans modification du test ?

Merci d'avance !

1voto

Je pense que votre test devrait vérifier que le contenu de votre modèle est chargé dans la fenêtre modale, au lieu de vérifier que le fichier du modèle existe. Pour ce faire, vous devez utiliser ngMock avec Jasmine. Vous pouvez trouver un exemple de test similaire dans la section code source de AngularUI Bootstrap Voici ma solution (il ne s'agit pas d'un code réel, juste d'un exemple) :

describe('Modal window', function() {
    var $rootScope,
        $uibModal,
        $compile,
        modal;

    beforeEach(module('ui.bootstrap.modal'));

    beforeEach(inject(function(_$rootScope_, _$compile_, _$uibModal_) {
        $rootScope = _$rootScope_;
        $compile = _$compile_;
        $uibModal = _$uibModal_;

        var modalOptions = {
            templateUrl: 'path/to/template.html',
            controller: 'ControllerName',
            resolve: {
                context: jasmine.any(Function)
            }
        };

        var modal = $uibModal.open(modalOptions);
        $rootScope.$digest();

    }));

    it('should load "Hello World" from template', function {
         var contentToCompare = actual.find('body > div.modal > div.modal-dialog > div.modal-content');
         var result = contentToCompare.html().indexOf('Hello World');
         expect(result).toBeGreaterThan(0);
    });
});

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X