在angularjs中使用karma测试控制器时出错

时间:2014-02-19 09:45:16

标签: angularjs karma-runner karma-jasmine

我想用Karma测试我的应用程序。我已经配置它并编写一个简单的测试套件来检查我的应用程序中是否存在控制器。我收到错误“类型错误:无法调用方法方法'等于'未定义。我的测试套件条件如下。请建议

describe('module present', function() {
    beforeEach(angular.mock.module('demoapp'));
    it('should have a demoCtrl controller', function() {
        expect(demoapp.ProductCtrl).not.to.equal(null);
    });
});

我的karma.config就像这样

 files : [
      'Scripts/angular.js',
      'Scripts/angular-translate.js',
      'Scripts/angular-translate-loader-static-files.js',
      'Scripts/angular-mocks.js',
      'Scripts/angular-*.js',
      'Test/lib/angular/angular-mocks.js',
      'Scripts/ProjectScript/app.js',
      'Scripts/ProjectScript/DemoData.js',
      'Scripts/ProjectScript/TimerController.js',     
      'Scripts/ProjectScript/**/*.js',
      'Test/unit/**/*.js'

    ],

    exclude : [
      'Scripts/angular-loader.js',
      'Scripts/angular-scenario.js'
    ],

谢谢和问候 utpal

2 个答案:

答案 0 :(得分:3)

试试这个,我希望它有所帮助

beforeEach(module('demoapp'));

  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('ProductCtrl', {
      $scope: scope
    });
  }));

it('should have a demoCtrl controller', function() {
        expect(ctrl).not.to.equal(null);
    });

答案 1 :(得分:0)

不确定您是否正在显示整个karma.conf.js文件。无论如何,您应该提到要在配置中使用的测试框架。你需要一个属性

frameworks: ["jasmine"]

以下是整个配置的示例。这非常有效。

module.exports = function (config) {
    config.set({
        basepath: '.',
        frameworks: ["jasmine"],
        //list of file patterns to load in the browser
        files: [
            'web/public/lib/jquery/jquery-1.9.1.js',
            'web/public/lib/angular/angular.min.js',
            'web/public/lib/async/async.js',
            'test/client/lib/angular/angular-mocks.js',
            'web/public/lib/angular-ui/*.js',
            'web/public/js/**/*.js',
            'test/client/public/js/**/*.js',
            'test/client/public/js/**/*.coffee'
        ],

        preprocessors: {
            'web/public/js/**/*.js': ['coverage'],
            '**/*.coffee': ['coffee']
        },

        // use dots reporter, as travis terminal does not support escaping sequences
        // possible values: 'dots' || 'progress'
        reporters: ['progress', 'coverage'],

        coverageReporter: {
            type: 'lcov',
            dir: 'coverage/'
        },

        // these are default values, just to show available options

        // web server port
        port: 8089,

        // cli runner port
        runnerPort: 9109,

        //urlRoot = '/__test/';

        // enable / disable colors in the output (reporters and logs)
        colors: true,

        // level of logging
        // possible values: LOG_DISABLE || LOG_ERROR || LOG_WARN || LOG_INFO || LOG_DEBUG
        logLevel: config.LOG_INFO,

        // enable / disable watching file and executing tests whenever any file changes
        autoWatch: false,

        // polling interval in ms (ignored on OS that support inotify)
        autoWatchInterval: 0,

        // Start these browsers, currently available:
        // - Chrome
        // - ChromeCanary
        // - Firefox
        // - Opera
        // - Safari
        // - PhantomJS
        browsers: ['PhantomJS'],

        // Continuous Integration mode
        // if true, it capture browsers, run tests and exit
        singleRun: true

    });
};