1

ПОЛОЖЕНИЕ:Карма-Жасмин: Как протестировать ионныйМодальный?

В моем приложении Ионные я тестирую правильное открытие модального.

Я сделал несколько попыток, но я получаю следующее сообщение об ошибке:

TypeError: Cannot read property 'then' of undefined 

ФУНКЦИЯ:

$scope.open_register_modal = function() 
{ 
    $ionicModal.fromTemplateUrl('templates/project_register.html', { 
     scope: $scope 
    }).then(function(modal) { 
     $scope.modal_register = modal; 
     $scope.modal_register.show(); 
    }); 
}; 

ТЕСТ:

describe('App tests', function() { 

    beforeEach(module('my_app.controllers')); 

    beforeEach(inject(function(_$controller_, _$rootScope_) 
    { 
     $controller = _$controller_; 
     $rootScope = _$rootScope_; 
     $scope = _$rootScope_.$new(); 

     $ionicModal = 
     { 
      fromTemplateUrl: jasmine.createSpy('$ionicModal.fromTemplateUrl'), 
      then : function(modal){} // <--- attempt 
     }; 

     var controller = $controller('MainCtrl', { $scope: $scope, $rootScope: $rootScope, $ionicModal: $ionicModal }); 
    })); 


    describe('Modal tests', function() 
    { 
     it('should open register modal', function() 
     { 
      $scope.open_register_modal(); 

      expect($ionicModal).toHaveBeenCalled(); 
     }); 
    }); 

}); 

ПОПЫТКИ:

Вот некоторые из попыток инициализировать $ ionicModal:

1.

$ionicModal = 
    { 
     fromTemplateUrl: jasmine.createSpy('$ionicModal.fromTemplateUrl'), 
     then : function(modal){} 
    }; 

2.

$ionicModal = 
    { 
     fromTemplateUrl: jasmine.createSpy('$ionicModal.fromTemplateUrl'), 
     then: jasmine.createSpy('$ionicModal.then') 
    }; 

3.

$ionicModal = 
    { 
     fromTemplateUrl: jasmine.createSpy('$ionicModal.fromTemplateUrl'), 
     then: jasmine.createSpy('$ionicModal.fromTemplateUrl.then') 
    }; 

4.

$ionicModal = jasmine.createSpyObj('$ionicModal', ['show', 'close','fromTemplateUrl']); 

Но все они дают ту же ошибку:

TypeError: Cannot read property 'then' of undefined 

ВОПРОС:

Как я могу пройти метод .then внутри теста?

Как я могу правильно проверить ionicModal?

ответ

2

Я ничего не знаю об ионных, но я думаю, что ваша ошибка ожидает, что метод then является его частью. Код

$ionicModal.fromTemplateUrl('templates/project_register.html', { 
    scope: $scope 
}).then(function(modal) { 
    $scope.modal_register = modal; 
    $scope.modal_register.show(); 
}); 

может быть рефакторинг к:

var temp=$ionicModal.fromTemplateUrl(
     'templates/project_register.html', 
     {scope: $scope}); 

temp.then(function(modal) { 
    $scope.modal_register = modal; 
    $scope.modal_register.show(); 
}); 

поэтому метод then является частью объекта, возвращаемого вызовом fromTemplateUrl

Решение может быть что-то вроде:

function fakeTemplate() { 
    return { then:function(){}} 
} 
$ionicModal = { 
     fromTemplateUrl: jasmine.createSpy('$ionicModal.fromTemplateUrl').and.callFake(fakeTemplate) 
    }; 
+0

Большое спасибо @Pablo! Сейчас работает! Я не получаю никаких ошибок, и переменная внутри modal_register() корректно протестирована, что становится истинным после вызова функции.Я все еще должен понять, как на самом деле проверить правильность функционирования модального (open, close), но теперь я решаю главный вопрос! – johnnyfittizio

Смежные вопросы