0
我無法使用require和karma爲我的AngularJS應用程序編寫測試。當我從業力中加載主源文件時,我隨機得到'module is not defined'錯誤,我不確定原因。AngularJS + Require + Karma - 無法運行測試
我的項目結構如下:
main
-webapp
-components
-{all my external libs}
-js
-{my js files}
test
-lib
angular-mocks.js
underscore.js
-webapp
karma.conf.js
server.js
test-main.js -> require js config
-unit
myTest.js
我測試main.js定義如下 -
var tests = [];
for (var file in window.__karma__.files) {
if (/Test\.js$/.test(file)) {
tests.push(file);
console.log(file);
}
}
requirejs.config({
baseUrl:'base/',
paths:{
'angular':'main/webapp/components/angular-1.0.7',
'jquery':'main/webapp/components/jquery',
'jquery-ui':'main/webapp/components/jquery-ui',
'lodash':'main/webapp/components/lodash',
'underscore':'test/webapp/lib/underscore',
'angular-mocks':'test/webapp/lib/angular-mocks',
'requireLibChecker':'test/webapp/checker/requireLibChecker',
'bootstrap':'main/webapp/components/bootstrap/js/bootstrap',
'bootstrap-datepicker':'main/webapp/components/bootstrap/js/bootstrap-datepicker',
'app':'main/webapp/js/mcc',
'helper':'main/webapp/js/helper',
'js':'main/webapp/js'
},
shim:{
'angular':{
exports:'angular'
},
'angular-mocks':{
exports:'angular-mocks'
},
'underscore':{
exports:'_'
},
'jquery-ui':{
deps:['jquery'],
exports:'jquery-ui'
},
'bootstrap-datepicker':{
deps:['jquery', 'bootstrap'],
exports:'datepicker'
}
},
priority:[
"angular"
],
// ask Require.js to load these files (all our tests)
deps:tests,
priority:['angular'],
// start test run, once Require.js is done
callback:window.__karma__.start
});
我的主要的第一源文件(mcc.js)引起的錯誤當通過業力加載和定義如下:
define("app", [
'angular',
'js/controllers/overviewctrl',
'js/controllers/topicactivityctrl',
'js/services/transportmodel',
'js/services/subjectmodel',
'js/directives/controlsdirective',
'bootstrap-datepicker',
'jquery-ui'
], function(angular) {
var app = angular.module('mcc', []).config(['$routeProvider', function ($routeProvider) {
$routeProvider.
when('/overview', {
templateUrl:'partials/system-overview.html',
controller: 'OverviewController'
}).
when('/overview/:systemId', {
templateUrl:'partials/system-overview.html',
controller: 'OverviewController'
}).
otherwise({redirectTo:'/overview'});
}]);
app.controller("AppController", ['$rootScope', 'transportModel', function($rootScope, transportModel) {
$rootScope.$on("$routeChangeError", function(event, current, previous, rejection) {
alert("Route Change Error: " + rejection);
});
if ($rootScope.mcc_region === undefined)
$rootScope.mcc_region = "New York";
transportModel.then(function(tm) {
$rootScope.mcc_regions = tm.regions;
});
}]);
return app;
});
require(['angular', 'helper'], function(angular, helper) {
angular.element(document).ready(function() {
/* MANUALLY LOAD TO WAIT FOR APP */
angular.bootstrap(document, ['mcc']); --> This line causes the error
/* NAVIGATE TO TOP OF PAGE FOR MOBILE DEVICES */
window.scrollTo(0, 1);
});
});
我想調試爲什麼 -
angular.bootstrap(document,['mcc']); 隨機導致的錯誤 - 也就是說,瀏覽器(chrome,phantomJS)有時候會找到這個模塊,有時候它通過業力運行時不會。如果我把它作爲一個普通的網絡應用程序運行,它總是第一次正常工作。