为角度设置Jasmine / karma

时间:2015-01-28 04:12:03

标签: javascript angularjs jasmine karma-runner

我很轻松地遵循本指南 - http://paislee.io/testing-angularjs-with-grunt-karma-and-jasmine/ - 并且遇到以下几个问题:

Error: [$injector:modulerr] Failed to instantiate module myApp due to:
Error: [$injector:modulerr] Failed to instantiate module ngRoute due to:
Error: [$injector:nomod] Module 'ngRoute' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.

我按照它告诉我的方式安装了所有内容,并找到了另一个设置测试的基本示例(这是我第一次实施,所以我从小开始),测试看起来像这样

describe('Unit: MainCtrl', function() {
// Load the module with MainCtrl
beforeEach(module('myApp'));

var ctrl, scope;
// inject the $controller and $rootScope services
// in the beforeEach block
beforeEach(inject(function($controller, $rootScope) {
// Create a new scope that's a child of the $rootScope
scope = $rootScope.$new();
// Create the controller
ctrl = $controller('MainCtrl', {
  $scope: scope
});
}));

it('should create $scope.greeting when calling sayHello', 
function() {
  expect(scope.greeting).toBeUndefined();
  scope.sayHello();
  expect(scope.greeting).toEqual("Hello Ari");
 });

})

在控制器中它只是

 $scope.name = "Ari";
$scope.sayHello = function() {
$scope.greeting = "Hello " + $scope.name;
}

(这是来自http://www.ng-newsletter.com/advent2013/#!/day/19

我将应用程序设置和控制器放在单独的文件夹中,使用常规的ng-route结构,我认为这可能是问题所在?我为此使用了咕噜的业力 - 这里的任务只是让它变得有用。

  karma: {  
      unit: {
        options: {
          frameworks: ['jasmine'],
          singleRun: true,
          browsers: ['PhantomJS'],
          files: [
            'app/bower_components/angular/angular.js',
            'app/bower_components/angular-mocks/angular-mocks.js',
            'app/scripts/**/*.js'
          ]
        }
      }
    }

我可以使用一些帮助,这是我第一次尝试这个,我很乐意进行一些自动化测试。感谢您的阅读!!

2 个答案:

答案 0 :(得分:1)

您尚未包含ngroute模块,因为此模块存在一些依赖性。

应该有一个凉亭组件

'app/bower_components/angular-route/angular-route.js',

安装此bower组件并将此行添加到karma config。

检查其他模块。

答案 1 :(得分:1)

您需要在karma conf中的文件列表中包含ngRoute。错误消息说明了这一点。

karma: {  
      unit: {
        options: {
          frameworks: ['jasmine'],
          singleRun: true,
          browsers: ['PhantomJS'],
          files: [
            'app/bower_components/angular/angular.js',
            'app/bower_components/angular-mocks/angular-mocks.js',
            'app/bower_components/angular-mocks/angular-route.js',
            'app/scripts/**/*.js'
          ]
        }
      }
    }