Это для работы (у меня есть разрешение), поэтому я не могу отправить точный код.Работа с зависимостями в angularjs Тестирование
Поэтому я должен проверить контроллеры большого модуля. Модуль имеет большую конфигурационную функцию с множеством контроллеров для логики разных страниц.
Для фактического применения он загружен беседкой, которая раздражает, так как я тестирую Karma-Browserify и npm. Таким образом, зависимости - беспорядок. Я в основном должен импортировать все, что было загружено с bower.json в package.json.
Это мой karma.conf.js:
module.exports = function(config) {
config.set({
basePath: 'resources',
browserify: {
debug: true,
transform: [ 'browserify-shim' ]
},
browsers: [ 'PhantomJS' ],
captureTimeout: 60000,
client: {
mocha: {}
},
files: [
'tests/assist/test.js',
'assets/scripts/libs/logger.min.js'
],
frameworks: [ 'browserify', 'phantomjs-shim', 'mocha', 'chai' ],
port: 8080,
preprocessors: {
'tests/assist/controller.js': [ 'browserify' ]
},
reporters: [ 'mocha', 'coverage' ],
singleRun: true
});
};
Поэтому код ниже это мой test.js (удаление некоторых названий конкретных компаний). Также мне нужно поставить angular.mock. или он не будет работать
require('angular');
require('angular-mocks');
//Main module needs these
jQuery = require('jquery');
require('angular-bootstrap');
require('angular-recaptcha');
require('angular-ui-router');
require('ngstorage');
require(**The path to the main module**);
require(**The path to a service it uses**);
require(**The path to a service it uses**);
require(**The path to a service it uses**);
describe('Blah', function() {
beforeEach(angular.mock.module('myApp'));
var $controller;
beforeEach(angular.mock.inject(function(_$controller_) {
$controller = _$controller_;
}));
describe('blahblah', function() {
it('sets loading to true', function() {
var $scope = {};
var controller = $controller('controller', {$scope: $scope});
assert($scope.showLoading === true);
});
});
});
Основной модуль:
(function() {
'use strict';
})();
// Jquery noconflict
jQuery.noConflict();
var myApp = angular.module('myApp', ['ui.router', 'ngStorage', 'vcRecaptcha', 'ui.bootstrap']);
myApp.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouterProvider, $locationProvider) {
...
}])
.run([blah bunch of dependencies]) {
...
}]);
Контроллер (отдельный тьфу):
'use strict';
myApp.controller('controller', ['$scope', '$http', '$localStorage', 'service1', 'service2', 'service3',
function ($scope, $http, $localStorage, service1, service2, service3) {
..
}
...
Как вы можете видеть, что я в аду зависимости. Я получил пример теста на угловом сайте для работы, основная проблема заключается в том, что зависимости и myApp не видны контроллеру. "ReferenceError: Не удалось найти переменную: myApp" в контроллерах/услугах
Если у кого-то есть лучший способ пройти тестирование, я все уши.
не обязательно лучший способ тестирования столько, сколько у меня есть предложение. Angularjs не предназначено для написания с кучей контроллеров, по сути, в Angular2, они полностью отключили контроллеры, потому что люди пропустили их. Я предлагаю оглянуться на документы и подумать о том, чтобы перейти на более директивный центральный маршрут. Недавно моя компания переключилась с контроллеров на заводы и директивы и заметила значительное улучшение. – Ohjay44
Спасибо за комментарий. Я всего лишь стажер, поэтому я просто должен проверить код, который я не писал, поэтому я не могу делать никаких переключений и т. Д. Надеюсь, ответ «estus» исправляет его. –