4

У меня есть список предметов. Когда вы нажимаете на элемент, он выводит модальный файл для отображения данных для этого элемента. В контроллере для списка есть функция openRecentsModal, которая берет объект данных из списка ng-repeat и создает его в новой области, когда функция запускается. Тогда новый модальный объект имеет доступ к этому объекту как $ scope.recentsFoldersData. Мне нужно написать единичный тест, чтобы гарантировать, что recentsFolderData определен в области, но все, что я пробовал, приводит к «ожидаемому неопределенному определению». Я надеюсь, что кто-то может помочь.Жасмин единичный тест для проверки объема углового бутстрапа modal

Вот метод в контроллере списка, чтобы открыть модальное:

function openRecentsModal(obj) { 
    var scope = $rootScope.$new(); 
    scope.recentsFoldersData = obj; 
    var controller = 'recentsFoldersDetailController'; 
    $modal.open({ 
    scope: scope, 
    controller: controller, 
    templateUrl: 'js/modal/recents/folder/recentsFoldersDetail.tpl.html' 
    }); 
} 

Вот контроллер модальной по:

angular.module('modal.recents.folder', []) 
    .controller('recentsFoldersDetailController', recentsFoldersDetailController); 

    recentsFoldersDetailController.$inject = ['$scope', '$modalInstance']; 
    function recentsFoldersDetailController($scope, $modalInstance) { 

    $scope.close = function close() { 
     $modalInstance.dismiss('close'); 
    }; 
    } 

Наконец, вот модульных тестов я работаю (я имею исключены те, которые проходят, а также вспомогательные функции, которые не нужны для этого теста):

describe('recents folders modal controller tests', function() { 
    var scope, q, modal, mockDetailController, mockListController, mockRecentService, mockFolderService, mockModalInstance, $httpBackend; 

    beforeEach(module('mainApp')); 

    beforeEach(inject(function($rootScope, $q, $controller, $modal, _recentService_, _folderService_, $injector) { 
    q = $q; 
    scope = $rootScope.$new(); 
    modal = $modal; 
    $httpBackend = $injector.get('$httpBackend'); 
    $httpBackend.whenGET('js/modal/recents/folder/recentsFoldersDetail.tpl.html').respond(200, ''); 
    mockRecentService = _recentService_; 
    mockFolderService = _folderService_; 
    mockModalInstance = { 
     dismiss: jasmine.createSpy('modalInstance.dismiss') 
    }; 

    mockDetailController = function() { 

     return $controller('recentsFoldersDetailController', { 
     '$scope': scope, 
     '$modalInstance': mockModalInstance 
     }); 
    }; 

    mockListController = function() { 

     return $controller('recentsListFoldersController', { 
     '$scope': scope, 
     '$modal': modal, 
     'recentService': mockRecentService, 
     'folderService': mockFolderService 
     }); 
    }; 
    })); 

    describe('scope tests', function() { 

    it('should place the data on the scope when openRecentsModal is called', function() { 
     var obj = defaultSuccessfulRecentsDataResponse(); 
     mockListController(); 
     spyOn(scope, 'openRecentsModal'); 

     scope.openRecentsModal(obj); 
     expect(scope.openRecentsModal).toHaveBeenCalledWith(obj); 
     mockDetailController(); 
     expect(scope.recentsFoldersData).toBeDefined(); 
    }); 

    }); 

    /* helper functions */ 
    function defaultSuccessfulRecentsDataResponse() { 
    return { 
     id: 'id 1', 
     name: 'first name', 
     description: 'first description' 
    }; 
    } 

}); 

ответ

0

я был в состоянии исправить это с помощью простого изменения в функции, вызывающей режимные

function openRecentsModal(obj) { 
     $rootScope.recentsFoldersData = obj; 
     var controller = 'recentsFoldersDetailController'; 
     $modal.open({ 
     //scope: scope, 
     controller: controller, 
     templateUrl: 'js/modal/recents/folder/recentsFoldersDetail.tpl.html' 
     }); 
    } 

Позволяя объект, который будет размещен на $ rootScope (настройка UI-Bootstrap Модальные по умолчанию), а не новый $ рамки, испытание вернулось с определенным значением

it('should put recents object on the scope', function() { 
    mockListController(); 

    scope.openRecentsModal(defaultSuccessfulRecentsDataResponse()); 
    mockDetailController(); 
    expect(scope.recentsFoldersData).toBeDefined(); 
}); 
Смежные вопросы