AngularJS控制器测试未通过RequireJS
我的jasmine测试(使用karma)抛出错误:参数“salesListController”不是函数,未定义 在搜索了很多之后,这似乎接近我的错误,但这是单元测试而不是e2e场景测试 mytest-main.jsAngularJS控制器测试未通过RequireJS,angularjs,requirejs,jasmine,karma-runner,Angularjs,Requirejs,Jasmine,Karma Runner,我的jasmine测试(使用karma)抛出错误:参数“salesListController”不是函数,未定义 在搜索了很多之后,这似乎接近我的错误,但这是单元测试而不是e2e场景测试 mytest-main.js (function (window, require) { 'use strict'; var file, requireModules; requireModules = []; for (file in window.__karma__.files) { if (wi
(function (window, require) {
'use strict';
var file, requireModules;
requireModules = [];
for (file in window.__karma__.files) {
if (window.__karma__.files.hasOwnProperty(file)) {
// console.log('loaded file'+ file);
if (file.substring(file.length - 26, file.length) === 'salesListControllertest.js') {
console.log('Added file to testing..');
requireModules.push(file);
}
}
}
//requireModules.push('appModule');
//requireModules.push('mocks');
deps: requireModules,
require({
baseUrl: '',
paths:{
'angular': '/base/app/bower_components/angular/angular',
'angularResource': '/base/app/bower_components/angular-resource/angular-resource',
'angularMocks': '/base/app/bower_components/angular-mocks/angular-mocks',
'appModule': '/base/app/scripts/appModule',
'appRoutes':'/base/app/scripts/appRoutes',
'services/dependencyResolverFor':'/base/app/scripts/services/dependencyResolverFor',
'salesListController' : '/base/app/scripts/controllers/salesListController'
},
shim:{
'angular' :{
exports:'angular'
},
'appRoutes': {exports:'appRoutes'},
'services/dependencyResolverFor' : {exports:'services/dependencyResolverFor'},
'appModule': {
deps: ['appRoutes', 'services/dependencyResolverFor'],
exports: 'appModule'
},
'angularResource': {
deps: ['angular'],
exports: 'angularResource'
},
'angularMocks': {
deps: ['angularResource'],
exports: 'angularMocks'
} ,
'salesListController': {
deps: ['appModule'],
exports: 'salesListController'
}
}
}, requireModules, function () {
window.__karma__.start();
}, function (err) {
var failedModules = err.requireModules;
console.log("err", err);
if (failedModules && failedModules[0]) {
throw new Error("Module could not be loaded: " + failedModules);
} else {
throw new Error("unknown error:" + err);
}
}); }(window, require));
我的示例.spec
define(['appModule','angular', 'angularResource', 'angularMocks','salesListController'],
function(app, angular, angularResource, angularMocks, saleslstCtrl) {
describe('SalesListController1', function(){
beforeEach(module('AngularSampleBhoomiApp'));
var SalesListController, scope;
var sales = [{Customer:"A1",Number:1,Id:1},{Customer:"B1",Number:2,Id:2}];
beforeEach(inject(function($controller, $rootScope,$injector){
scope = $rootScope.$new();
SalesListController = $controller('salesListController', {$scope:scope, getAllSalesResolved:sales});
}));
it('should have 0 items when loaded', function(){
expect(scope.sales).toBeUndefined();
});
});});
我的示例控制器
define(['appModule'], function(myApp){
function SalesLstCtrl(){
myApp.lazy.controller('salesListController' ,['$scope', 'getAllSalesResolved',
function ($scope, sales) {
console.log('before sales');
$scope.sales= sales;
console.log( $scope.sales.length);
}]); }
return SalesLstCtrl;});
由于我正在使用延迟加载,因此我正在解决如下依赖关系:
define([], function()
{
return function(dependencies)
{
var definition =
{
resolver: ['$q','$rootScope', function($q, $rootScope)
{
var deferred = $q.defer();
require(dependencies, function()
{
$rootScope.$apply(function()
{
deferred.resolve();
});
});
return deferred.promise;
}]
}
return definition;
} });
我对整个样本的github回购是
Pl帮助。是的,我找到了解决方案 是我的博客帖子,也是一样的 GitHub代码如下: 这是通过模拟模块创建来完成的 编辑: 用密码。这里的技巧是如下初始化AngularJS:
define(function(){ var app = angular.module('AngularAppModule', 'ngResource']);app.lazy = app; return app;});
这将在Angular中添加app.lazy引用,然后RequireJS可以以相同的方式初始化控制器。Test-main.js文件是相同的。对于运行Karma,testmain将预先加载所有脚本,并且Require不会干扰。如果您还有其他问题,请告诉我。Bhoomi,这样行吗?如果您有解决方案,请在此处更新。。。谢谢。请注意,答案应该是搜索解决方案的终点(而不是参考文献的另一个中途停留,随着时间的推移,这些参考文献往往会过时)。请考虑在这里添加一个独立的概要,将链接作为参考。