Карма: Угловой модуль Mocking

0

В настоящее время я пытаюсь написать тесты модуляции кармы для контроллера в угловом приложении. Для меня желаемый результат - загрузить ТОЛЬКО контроллер, который я тестирую (предположим, что я только когда-либо хочу протестировать этот один контроллер), и у меня есть все другие зависимости.

Чтобы настроить сцену:

  • У меня есть модуль: "XYZ", определенный в js/xyz_module.js
  • У меня есть модуль: "ABC", определенный в js/abc_module.js
  • модуль "ABC" зависит от "XYZ"
  • модуль "ABC" имеет контроллер: "AbcController", определенный в js/abc_controller.js
  • мое тестирование должно выполняться ТОЛЬКО на "AbcController"

karma.conf.js:

module.exports = function(config) {
  config.set({
    basePath: '',
    frameworks: ['jasmine'],
    files: [
        'node_modules/angular/angular.js',
        'node_modules/angular-mocks/angular-mocks.js',
        'js/abc_module.js',
        'js/controllers/abc_controller.js',
        'spec/karma/abc_controller_spec.js'
    ],
...

abc_module.js:

angular.module('ABC', ['XYZ']);

abc_controller.js:

angular.module('ABC').controller('AbcController', ['$scope', function($scope) {
   $scope.letters = ['a', 'b', 'c']
}]);

abc_controller_spec.js:

describe('AbcController', function() {
    beforeEach(function() {
        angular.mock.module('XYZ');
        module('ABC')
    });

    var $controller;
    beforeEach(inject(function(_$controller_) {
        $controller = _$controller_
    }));

    describe('$scope.letters', function() {
        it("is set to three letters", function() {
            var $scope = {};
            $controller('AbcController', {$scope: $scope});
            expect($scope.letters.length).toEqual(3)
        })
    })
});

Моя теория заключалась в том, что, поскольку модуль XYZ является издеваемым модулем, я не должен включать js/xyz_module.js в свой файл karam.conf.js, но что насмешливая структура просто издевается над ним. К сожалению, это, похоже, не так. Когда я запускаю карму, я получаю сообщение об ошибке, что он не может найти модуль "XYZ". Есть ли способ обойти это? Если мне нужно включить все зависимости даже для проверки части приложения, это сделает ее экспоненциально более сложной с более сложными приложениями. Очевидно, что это надуманный пример, и проект, над которым я фактически работаю, включает в себя множество модулей со многими зависимостями, что делает его чрезвычайно трудным для проверки его частей, если я должен эффективно включать все приложение. Я думал, что это был смысл насмешек? Я что-то упускаю?

  • 0
    Не могу полностью понять требование. Итак, вы хотите протестировать только один контроллер за раз, когда запускается карма вместо всех файлов?
  • 0
    Я хочу иметь возможность тестировать модули без необходимости включать все зависимости. Я хотел бы смоделировать (возможно, заглушка - лучший термин) зависимости, особенно когда зависимости не используются в тестируемом коде.
Показать ещё 2 комментария
Теги:
unit-testing
karma-runner

1 ответ

0

После дальнейших исследований, я думаю, теперь я понимаю, что angular.mock.module фактически не создает CREATE, а используется для инициализации существующего модуля. Таким образом, если я создаю дополнительный файл mock с помощью: angular.module('XYZ',[]); , добавьте его в karma.conf.js и THEN do beforeEach(angular.mock.module('XYZ')); это похоже на работу. Один ребенок шагнул вперед. Следующий шаг - издеваться над любыми зависимостями, которые имеет "XYZ", и что мой модуль "ABC" использует, но это, вероятно, еще один вопрос.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню