0

我想使用 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

4

2 回答 2

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);
    });
于 2014-02-19T10:31:51.247 回答
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

    });
};
于 2014-02-19T14:22:53.643 回答