【问题标题】:Angular JS Error: [$injector:nomod] Module 'portfolioMockupApp.services' is not availableAngular JS 错误:[$injector:nomod] 模块“portfolioMockupApp.services”不可用
【发布时间】:2015-01-23 21:48:40
【问题描述】:

我正在尝试使用 Karma 编写一些单元测试并收到以下错误:

PhantomJS 1.9.8 (Mac OS X) 错误 错误:[$injector:nomod] 模块“portfolioMockupApp.services”不可用!您要么拼错了模块名称,要么忘记加载它。如果注册模块,请确保将依赖项指定为第二个参数。 http://errors.angularjs.org/1.3.3/$injector/nomod?p0=portfolioMockupApp.services 在 /Users/danielbogart/Documents/coding/work/portfolio-mockup/bower_components/angular/angular.js:1749

另外,我在portfolioMockupApp.services 模块中有两个单独的文件,都保存在scripts/services 目录中。

Karma.conf 文件部分:

  files: [

  'bower_components/angular/angular.js',
  'bower_components/angular-mocks/angular-mocks.js',
  'bower_components/angular-animate/angular-animate.js',
  'bower_components/angular-cookies/angular-cookies.js',
  'bower_components/angular-resource/angular-resource.js',
  'bower_components/angular-sanitize/angular-sanitize.js',
  'bower_components/angular-touch/angular-touch.js',

  'test/mock/**/*.js',
  'test/spec/**/*.js',
  'app/scripts/services/*.js',
  'app/scripts/directives/*.js',
  'app/scripts/controllers/*.js',
  'app/scripts/app.js',
  'node_modules/angular/angular.js',
  'node_modules/angular-mocks/angular-mocks.js',
  './src/**/*.js',
  './test/**/*.js'
],

Portfolio.js 规范(目前是第一个也是唯一一个测试):

'use strict';

describe('Controller: PortfolioCtrl', function () {

// load the controller's module
beforeEach(module('portfolioMockupApp', 'portfolioMockupApp.services'));

var PortfolioCtrl,
scope;

// Initialize the controller and a mock scope
beforeEach(inject(function ($controller, $scope, $log, $stateParams, $state, 

$rootScope,portService, portfolioCreateService) {
scope = $rootScope.$new();
PortfolioCtrl = $controller('PortfolioCtrl', {
  $scope: scope
  });
}));

it('should have a list of 5 tabs by default', function () {
  expect(scope.tabs.length).toBe(5);
  });
});

【问题讨论】:

    标签: javascript angularjs unit-testing phantomjs karma-runner


    【解决方案1】:

    问题源于两个单独的服务文件使用同一个服务模块。在 Karma.conf 文件中,我必须显式加载初始化模块的服务文件,然后是其他服务文件和应用程序的其余部分。

      'app/scripts/services/port-service.js',
      'app/scripts/services/new-port-service.js',
      'app/scripts/app.js',
      'app/scripts/services/*.js',
      'app/scripts/directives/*.js',
      'app/scripts/controllers/*.js',
    

    【讨论】:

      【解决方案2】:

      感谢您回来查看解决方案。当两个模块相互依赖并存在于同一个文件夹中时,我遇到了同样的问题,我们称它们为 app/scripts/parentModule.js 和 app/scripts/constants.js。两者都应该被 karma.config.js 中的通配符条目选中。

      'app/scripts/*.js'
      'app/scripts/anotherFolder/*.js'
      

      由于 constants.js 依赖于 parentModule.js,因此必须首先包含后者,我猜测通配符按字母顺序包含文件,但我尚未确认这一点。

      'app/scripts/parentModule.js'
      'app/scripts/*.js'
      'app/scripts/anotherFolder/*.js'
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-06-06
        • 1970-01-01
        • 2023-04-11
        • 1970-01-01
        相关资源
        最近更新 更多