我已经使用Angular JS完成了一个图书馆管理应用程序,而Mongo Lab将作为一个数据库部分,我面临着使用需要JS依赖的问题,而Crating Unit测试用例
Error: [$injector:modulerr] Failed to instantiate module lmaApp due to:
Error: [$injector:nomod] Module 'lmaApp' is not available!
我面临的上述错误,请帮助我摆脱这一点。
mycode的:
Controller.js
define(
['modules'],
function(lmaApp) {
lmaApp.controller('gridControl',['$scope' , '$http' , 'internal' , 'commonValues', function($scope , $http , internalFn , commonValues){
jQuery('ul.navbar-nav li').removeClass('active');
jQuery('ul.navbar-nav li:nth-child(1)').addClass('active');
$('.loaderImg').removeClass('no-loading');
var lmaTableData = internalFn.getTableData(commonValues.mongoAPIurl,commonValues.bookTableName,'');
var promise = lmaTableData
.success(function(tbData) {
if(tbData.length > 0){
$scope.nobook=0;
$scope.books =tbData;
}
else{
$scope.nobook =1;
}
}).then(function (response) {$('.loaderImg').addClass('no-loading');});
}]);
});
modules.js
define(
['app_config','angularRoute'],
function() {
var lmaApp =angular.module('lmaApp',['ngRoute'])
return lmaApp;
});
app_config.js
define(
['angular','angularRoute','modules'],
function() {
angular.element(document).ready(function() {
angular.bootstrap(document, ['lmaApp'], {});
});
});
我的规范文件
controllerSpec.js
define(['angular', 'angular-mocks'], function() {
describe('gridControl', function(){
beforeEach(module('lmaApp'));
it('should get the book table Datas', inject(function($controller) {
var scope = {},
ctrl = $controller('gridControl', {$scope:scope});
expect(scope.phones.length).not.toEqual(0);
}));
});
});
这里我怀疑需要js依赖,就像我必须在Spec文件中提到modules.js
一样依赖。
答案 0 :(得分:0)
您的controller-spec.js错误,您需要调用其依赖项,即module.js
,app_config.js
,Controller.js
也'angularRoute'
。在其他ot让你的应用程序能够boostrap。
尝试这样
define(['angular', 'angular-mocks','modules', 'app_config', 'Controller', 'angularRoute'], function() { ... }
我仍然没有什么可以确定它对你有用。因为如果您的任何配置错误。它会被打破。在单元测试中使用带有AngularJS的requireJS在配置中非常棘手/复杂。
您应该阅读有关requireJS配置的更多信息,并使用shim
来定义脚本的依赖关系。当你的应用变得更大时,处理起来会更清晰,更清晰。例如,您可以在配置文件中执行以下操作:
shim: {
'modules': ['angular', 'app_config', 'angular-mocks'],
'app_config': ['angular', 'angularRoute', 'modules'],
'Controller': ['modules']
}
你的controller-spec.js会是这样的
define(['modules', 'app_config', 'Controller'], function(){ ... });
在准备好元素时引导角度不是测试的好主意。它可能会导致加载模拟业力时出现一些冲突。我不确定但对此感觉不对
Sencond 您的app_config.js
和modules.js
是彼此的依赖关系。那么如果有什么需要加载订单,您认为怎么样?哪个需要先加载?因为在需要被requireJS攻击之前,两者都需要加载另一个。
仍然我认为我的解决方案无效。因为你的配置似乎错了。