В настоящее время я пытаюсь написать тесты модуляции кармы для контроллера в угловом приложении. Для меня желаемый результат - загрузить ТОЛЬКО контроллер, который я тестирую (предположим, что я только когда-либо хочу протестировать этот один контроллер), и у меня есть все другие зависимости.
Чтобы настроить сцену:
js/xyz_module.js
js/abc_module.js
js/abc_controller.js
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". Есть ли способ обойти это? Если мне нужно включить все зависимости даже для проверки части приложения, это сделает ее экспоненциально более сложной с более сложными приложениями. Очевидно, что это надуманный пример, и проект, над которым я фактически работаю, включает в себя множество модулей со многими зависимостями, что делает его чрезвычайно трудным для проверки его частей, если я должен эффективно включать все приложение. Я думал, что это был смысл насмешек? Я что-то упускаю?
После дальнейших исследований, я думаю, теперь я понимаю, что angular.mock.module фактически не создает CREATE, а используется для инициализации существующего модуля. Таким образом, если я создаю дополнительный файл mock с помощью: angular.module('XYZ',[]);
, добавьте его в karma.conf.js и THEN do beforeEach(angular.mock.module('XYZ'));
это похоже на работу. Один ребенок шагнул вперед. Следующий шаг - издеваться над любыми зависимостями, которые имеет "XYZ", и что мой модуль "ABC" использует, но это, вероятно, еще один вопрос.