获取错误:在角度 js 中进行单元测试时出现 $injector:modulerr 模块错误

Posted

技术标签:

【中文标题】获取错误:在角度 js 中进行单元测试时出现 $injector:modulerr 模块错误【英文标题】:Grtting Error: $injector:modulerr Module Error while unit testing in angular js 【发布时间】:2017-01-23 02:55:32 【问题描述】:

我正在尝试用 Angular 和 jasmine 编写单元测试用例。运行测试时出现以下错误:

var BCM = angular.module("App", ['ui.router','ngAnimate','ui.bootstrap','ngAria','ngTable','ngSanitize','jcs-autoValidate','toaster', 'googlechart'])
.config( [ "$stateProvider","$urlRouterProvider","$controllerProvider","$provide","$compileProvider", function($stateProvider, $urlRouterProvider,$controllerProvider,$provide,$compileProvider) 

    $urlRouterProvider.otherwise("/")
    $stateProvider
    .state('login',
        url: "/",
        templateUrl: "media/views/login/login.html",
        resolve :
            deps: BCM.resolveScriptDeps(['media/js/app/modules/login/model/login-model.js','media/js/app/modules/login/controllers/login-controller.js'])
        ,
        controller  : 'loginController'
    )
]);
/** * 应用程序加载器的测试用例 */ '使用严格'; 描述('案例调查',函数() 变量 $state, $stateParams, $q, $templateCache, $location, $rootScope,$injector,getAllCase,getNewCase,getOwnCase,getResolvedCase; 之前(函数() angular.mock.module('ui.router'); angular.mock.module('ngAnimate'); angular.mock.module('ui.bootstrap'); angular.mock.module('ngAria'); angular.mock.module('ngTable'); angular.mock.module('ngSanitize'); angular.mock.module('jcs-autoValidate'); angular.mock.module('toaster'); angular.mock.module('googlechart'); 模块('caseInvetigation') ); beforeEach(注入(函数(_$state_,_$stateParams_,_$q_,_$templateCache_,_$location_,_$rootScope_) $state = _$state_; $stateParams = _$stateParams_; $q = _$q_; $templateCache = _$templateCache_; $位置 = _$位置_; $rootScope = _$rootScope_; spyOn('$state','go'); $templateCache.put('media/views/login/login.html',''); )); //测试我们的状态是否正确激活 it('应该激活状态', function() $state.go('登录'); $rootScope.$digest(); 期望($state.current.name).toBe('登录'); ); ); 错误... debug.html:38 错误:[$injector:modulerr] http://errors.angularjs.org/1.5.0/$injector/modulerr?p0=toaster&p1=Error%3A…ocalhost%3A9876%2Fbase%2Fjs%2Flib% 2Fangular%2Fangular-mocks.js%3A2799%3A52) 在错误(本机) 在 http://localhost:9876/base/js/lib/angular/angular.min.js:6:416 在 http://localhost:9876/base/js/lib/angular/angular.min.js:40:60 在 n (http://localhost:9876/base/js/lib/angular/angular.min.js:7:355) 在 g (http://localhost:9876/base/js/lib/angular/angular.min.js:39:135) 在 Object.fb [作为注入器] (http://localhost:9876/base/js/lib/angular/angular.min.js:43:164) 在 Object.workFn (http://localhost:9876/base/js/lib/angular/angular-mocks.js:2799:52)window.__karma__.result @debug.html:38KarmaReporter.specDone @adapter.js:243dispatch @ jasmine.js:2026(匿名函数) @jasmine.js:2000specResultCallback @jasmine.js:927complete @ jasmine.js:376clearStack @ jasmine.js:673QueueRunner.run @ jasmine.js:1932QueueRunner.execute @ jasmine.js:1910queueRunnerFactory @jasmine.js:710Spec.execute @jasmine.js:367fn @jasmine.js:2561attemptAsync @jasmine.js:1967QueueRunner.run @jasmine.js:1922QueueRunner.execute @jasmine.js:1910queueRunnerFactory @jasmine.js:710fn @jasmine .js:2546attemptAsync@jasmine.js:1967QueueRunner.run@jasmine.js:1922QueueRunner.execute@jasmine.js:1910queueRunnerFactory@jasmine.js:710TreeProcessor.execute@jasmine.js:2408Env.execute@jasmine.js:772(匿名函数)@adapter.js:322loaded@debug.html:42(匿名函数)@debug.html:140 debug.html:38 TypeError:无法读取未定义的属性“go” 在对象。 (app-loader-test.js:32)

【问题讨论】:

【参考方案1】:

我所做的唯一区别是(并且我没有将 $state 放入注入中):

const stateMock = jasmine.createSpyObj('$state', ['go']);
stateMock.go.and.callFake(() => true);

但不要忘记,如果您在模拟控制器,即:

vm = _$controller_(SomeController,
   $state: stateMock ,  );

如果您将 $state 注入到真正的控制器中,您将需要其中的 $state。

回到你的测试,然后这将在 $state 上执行你的测试(你可以更进一步,尝试 toHaveBeenCalledWith() 代替):

expect(stateMock.go).toHaveBeenCalled();

保留最后一行 ofc,检查州名是否正确,以便彻底。

【讨论】:

以上是关于获取错误:在角度 js 中进行单元测试时出现 $injector:modulerr 模块错误的主要内容,如果未能解决你的问题,请参考以下文章

单元测试时出现错误

ReferenceError:未定义窗口。当我通过 jest 运行 npm test 进行单元测试时出现此错误

为啥在尝试对整个 Spring Batch Job 进行单元测试时出现此错误?没有可用的“org.springframework.batch.core.Job”类型的合格bean

使用 React-testing-library 进行测试时出现 Next.js 路由器错误

Xcode 单元测试 - 仅为设备构建时出现链接错误

使用 express 提供角度服务时出现 CORS 错误