1

Jasmine で Angular アプリをテストするために Karma をセットアップしようとしています。次のエラーが表示されます。

INFO [karma]: Karma v0.10.4 server started at http://localhost:9876/
INFO [launcher]: Starting browser Chrome
INFO [Chrome 30.0.1599 (Mac OS X 10.9.0)]: Connected on socket pxDaOUXMfGXOVL7ZOuPb
Chrome 30.0.1599 (Mac OS X 10.9.0) ItemCtrl should work FAILED
    TypeError: Object [object Object] has no method 'off'
        at null.<anonymous> (/Users/macbookpro/Sites/groceries/spec/angular-mocks.js:1917:36)

の関数は次のangular-mocks.jsとおりです。

afterEach(function() {
    var injector = currentSpec.$injector;

    currentSpec.$injector = null;
    currentSpec.$modules = null;
    currentSpec = null;

    if (injector) {
      injector.get('$rootElement').off();
      injector.get('$browser').pollFns.length = 0;
    }

    angular.mock.clearDataCache();

    // clean up jquery's fragment cache
    angular.forEach(angular.element.fragments, function(val, key) {
      delete angular.element.fragments[key];
    });

    MockXhr.$$lastInstance = null;

    angular.forEach(angular.callbacks, function(val, key) {
      delete angular.callbacks[key];
    });
    angular.callbacks.counter = 0;
  });

カルマ設定で間違った順序でファイルを要求しているだけだと思います。これが私のファイル構造です:

karama.config.js/spec必要なファイルと同じディレクトリにあります。

// list of files / patterns to load in the browser
    files: [
      'angular.min.js',
      'angular-mocks.js',
      'app_testable.js',
      'app_spec.js'
    ],

app_testable.jsangular以外の依存関係のない、私のアプリの簡素化されたバージョンです。これが私のテストです。になろうとしているだけtrueですtrue

'use strict';

describe('ItemCtrl', function(){
  var scope;
  beforeEach(angular.mock.module('Grocerease'));
  beforeEach(angular.mock.inject(function($rootScope, $controller){
      scope = $rootScope.$new();
      $controller('ItemCtrl', {$scope: scope});
    })
  );

  it('should work', function(){
    expect(true).toBe(true);
  });

});

テストを正しく実行できるようにカルマを設定するにはどうすればよいですか?

4

1 に答える 1

5

この問題は、依存関係が正しく読み込まれていないようです。

どのバージョンの角度で作業していますか? 「angular」ファイルと「angular-mocks」ファイルは同じバージョンである必要があります。

于 2013-11-06T02:56:38.770 に答える