2016-03-25 13 views
0

です。私は多くのスレッドを調査してきましたが、私のエラーに関連するものは何も見つかりませんでした。私は私の角型アプリケーションをテストしようとしている(私はunitTestingにちょっと初心者であることをまず明確にしたい)

this tutorialによれば、私はすべてを設定しており、基本的なテストはうまくいきます。しかし、私がNgMockモジュールを組み込んだとき、私の実際の角型アプリケーションと私のコントローラのメソッドをテストする簡単なテストを書くと、次のstackTraceが得られます。

grunt karma:dev 
Running "karma:dev" (karma) task 
25 03 2016 20:41:24.754:INFO [karma]: Karma v0.13.22 server started at http://localhost:9876/ 
25 03 2016 20:41:24.763:INFO [launcher]: Starting browser Chrome 
25 03 2016 20:41:24.771:INFO [launcher]: Starting browser Firefox 
25 03 2016 20:41:28.747:INFO [Chrome 49.0.2623 (Windows 10 0.0.0)]: Connected on socket /#yRHoLsbEaJWHNtSDAAAA with id 47988329 
Chrome 49.0.2623 (Windows 10 0.0.0) Unit tests del CRM: Create new message Should create a text message with the correct structure FAILED 
     TypeError: $scope.$on is not a function 
      at new <anonymous> (C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/controllers/view-conversations.js:248:12) 
      at e (C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular.min.js:39:156) 
      at Object.instantiate (C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular.min.js:39:273) 
      at C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular.min.js:80:228 
      at C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular-mocks.js:1848:12 
      at Context.<anonymous> (C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/test/frontend/leadaki-app-tests.js:44:30) 
Chrome 49.0.2623 (Windows 10 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.087 secs/0.024 secs) 
Firefox 45.0.0 (Windows 10 0.0.0) Unit tests del CRM: Create new message Should create a text message with the correct structure FAILED 
     $scope.$on is not a function 
     @C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/controllers/view-conversations.js:248:5 
     [email protected]:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular.min.js:39:154 
     h/<[email protected]:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular.min.js:39:273 
     Xe/this.$get</<@C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular.min.js:80:226 
     angular.mock.$ControllerDecorator</<@C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/public/dashboard/v4/js/angular-mocks.js:1848:12 
     @C:/Users/Pablo/Data/software/workspace/intellij/leadaki-core/test/frontend/leadaki-app-tests.js:44:30 

Chrome 49.0.2623 (Windows 10 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.087 secs/0.024 secs) 
Firefox 45.0.0 (Windows 10 0.0.0): Executed 1 of 1 (1 FAILED) ERROR (0.053 secs/0.011 secs) 
Warning: Task "karma:dev" failed. Use --force to continue. 

Aborted due to warnings. 

ngMockが生成する「モック」スコープのように見えますが、リスナーなどを持つことはできません。

誰かがここで間違っているかもしれないというヒントを持っていますか?

私はすべての設定ファイルを貼り付けることができましたが、それはあまりにも多くの情報だと思うし、投稿をあふれさせたくありません。他の情報が必要な場合はお知らせください。追加します。

ありがとうございました!

describe('Unit tests del CRM: ', function() { 

    before(function() { 
     if (window.__html__) { 
      document.body.innerHTML = window.__html__['test/index.html']; 
     } 
    }); 

    beforeEach(angular.mock.module('appCliengo')); 

    var $controller; 
    var $rootScope; 

    beforeEach(angular.mock.inject(function(_$rootScope_, _$controller_){ 
     $rootScope = _$rootScope_; 
     $controller = _$controller_; 
    })); 

    describe('Create new message', function() { 
     it('Should create a text message with the correct structure', function() { 
      var $scope = {}; 
      var controller = $controller('Contacts.viewConversation', { $scope: $scope }); 

      var messageBody = 'Hola, me gustaria comprar un auto'; 
      var newTextMessage = $scope.createMessage('text/plain', '123456789', 'user', 'abcdefghijk', messageBody); 

      expect(newTextMessage.body).to.equal(messageBody); 
     }); 
    }); 
}); 

答えて

1

それはあなたの正確なセットアップを見ずに言うのは難しいのですが、あなたはあなたのコントローラに注入するスコープオブジェクトを作成したのですか?

多くの時間、あなただけの$ rootScopeオブジェクトを使用して、それ偽物次のことができます。

beforeEach(angular.mock.inject($injector => { 
    $controller = $injector.get('$controller'); 
    rootScope = $injector.get('$rootScope'); 
})); 

... test code ... 

let controller = $controller('UserController', {$scope: rootScope}); 

... do stuff with controller ... 

しかし、あなたはまた、新しいスコープを作成するためにrootScopeを使用してのそれを養うことができ

+0

た場合。コードを見ると、変数$ scopeをコントローラの$ scopeパラメータにバインドしています。つまり、$ scope。$を呼び出そうとすると、実際に{}。$を呼び出そうとしていることになります。通訳者はそこに何もないことを正しく伝えます。 $ scope:$ rootScopeを使うか、$ scope = $ rootScope。$ new();を使って$ scopeを実際のスコープオブジェクトにすることができます。 –

+0

ありがとう!今働いている! –

関連する問題