2017-02-02 3 views
0

私はカルマとジャスミンでAngularJsコントローラをテストするのが初めてです。

私はこのコントローラをテストしようとしている:

:私は、私はこのエラーを取得し、このテストコードを実行しようとすると、しかし

'use strict'; 

describe('dashboard.admin module', function() { 
    beforeEach(function(){ 
     module('app.dashboard.admin'); 
    }); 

    var auth, scope, ctrl, window; 

    beforeEach(inject(function ($controller, $rootScope, $window) { 
     auth = Auth; 
     scope = $rootScope.$new(); //get a childscope 
     window = { 
      translation: $window.translation 
     }; 

     ctrl = $controller("AdminCtrl", {$scope: scope, $window: window}); 
    })); 

    describe('Admin Controller', function() { 
     it('should inject controller', function() { 
      expect(ctrl).toBeDefined(); 
     }); 
    }); 
}); 

angular.module('app.dashboard.admin', []) 
    .controller('AdminCtrl', function (locale, $log, $scope, $window, $state) { 

     $scope.translation = $window.translation()[locale]; 
     $scope.showAdminBoard = false; 
     $scope.initModel = { 
      disableProgress: false, 
      message: $scope.translation['admin_platform_init'], 
      error: '' 
     }; 

     $scope.adminPrivileges = {}; 

     $scope.onGetAdminPrivileges = function() { 
      return $scope.adinPrivileges; 
     } 

はここに私のテストコードです

TypeError: undefined is not an object (evaluating '$scope.translation['admin_platform_init']') (line 11) 
     views/dashboard.admin/admin.js:11:40 
     [native code] 
     [email protected]_components/angular/angular.js:4786:61 
     [email protected]_components/angular/angular.js:10607:39 
     bower_components/angular-mocks/angular-mocks.js:2249:23 
     views/dashboard.admin/admin.spec.js:113:27 
     [email protected]_components/angular/angular.js:4771:24 
     [email protected]_components/angular-mocks/angular-mocks.js:3130:26 
     [email protected]://localhost:9876/context.js:151:17 
     [email protected]_components/angular-mocks/angular-mocks.js:3097:28 
     views/dashboard.admin/admin.spec.js:106:22 
     global [email protected]/dashboard.admin/admin.spec.js:3:9 
     Expected undefined to be defined. 
     views/dashboard.admin/admin.spec.js:118:37 
     [email protected]://localhost:9876/context.js:151:17 

私は$windowオブジェクトをモックし、angleの$ window objeをオーバーライドしようとしました私は成功しませんでした。

私はkarma.conf.jsファイルの依存関係をチェックしていますが、それらはすべてそこにあります。

私はまた、これらの質問チェックしています

Karma-Jasmine: How to test $translate.use?

jasmine mock window object

が、提案されたソリューションは、本当に助けていませんでしたが。

したがって、テストを実行できるように、$scope.translation['admin_platform_init']オブジェクトをモックする方法を見つけようとしています。

誰かが正しい方向に向けることができますか?

ありがとうございます。

+0

あざける$ウィンドウのポイントは何ですか? 'translation'が関数であると想定されている場合、それを必要なオブジェクトを返す関数にします。 – estus

答えて

0

を試してみてください。 $のwindow.translation`:

テストコードの修正は、次のようになります後:あなたはまだ本当の窓、 `翻訳に固執する場合

'use strict'; 

describe('dashboard.admin module', function() { 
    beforeEach(function(){ 
     module('app'); 
     module('app.dashboard.admin'); 
    }); 

    var auth, scope, ctrl, window; 

    beforeEach(inject(function ($controller, $rootScope, $window) { 
     auth = Auth; 
     scope = $rootScope.$new(); //get a childscope 
     window = { 
      translation: $window.translation 
     }; 

     ctrl = $controller("AdminCtrl", {$scope: scope, $window: window}); 
    })); 

    describe('Admin Controller', function() { 
     it('should inject controller', function() { 
      expect(ctrl).toBeDefined(); 
     }); 
    }); 
}); 
0

は、私が「アプリ」モジュールをインポートすることで、私の問題を解決するために管理し、この代わりに$ window.translation

window = { 
    translation: function() { 
     return { 
      "admin_platform_init": "This is test message" 
     }; 
    } 
}; 
+0

私はあなたの提案を試みたが、私はまだ同じエラーが発生します。 –