2016-03-25 28 views
0

Buradaki şey şu. Birçok iş parçacığı araştırıyordum ancak hatam ile ilgili hiçbir şey bulamadım. Açısal uygulamamı test etmeye çalışıyorum, (ilk önce ben unitTesting için yeni olduğumu açıklığa kavuşturmak istiyorum)

this tutorial'a göre herşeyi ayarlıyorum ve temel testler iyi çalışıyor. Ama ben NgMock modülünü dahil ettiğimde, gerçek açısal uygulamam ve denetleyicilerden birinde bir yöntemi test etmek için basit bir test yazdığımda aşağıdaki stackTrace'i elde ederim.

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. 

O ngMock böyle dinleyici veya bir şey var kabul etmez üretir "sahte" kapsam gibi görünüyor.

Burada herhangi bir sorun olabilir mi?

Tüm yapılandırma dosyalarımı yapıştırabilirim ama bence bu çok fazla bilgi ve yazıyı sel basmak istemiyorum. Başka bilgi gerekirse bana bildirin ve ekleyeceğim.

Teşekkürler!

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); 
     }); 
    }); 
}); 

cevap

1

Tam kurulumunuza bakmadan söylemek zor, ancak denetleyicinize enjekte etmek için bir kapsam nesnesi oluşturdunuz mu?

Çok zaman, sen sahte sadece $ rootScope nesnesini kullanarak yapabilirsiniz: Ancak

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 ... 

, ayrıca yeni bir kapsam oluşturmak için rootScope kullanabilir ve bu yem

+0

edin. koda bakarsanız, $ scope değişkenini denetleyicinizin $ scope parametresine bağlarsınız. Bunun anlamı, $ scope. $ Olarak adlandırmayı denediğinizde, gerçekten {}. Tercüman, orada hiçbir şey olmadığını doğru bir şekilde söyler. $ Scope: $ rootScope'u kullanabilir veya $ kapsamını gerçek kapsam nesnesini kullanarak yapabilirsiniz: $ scope = $ rootScope. $ New(); –

+0

Teşekkürler! Şuan çalışıyor! –

İlgili konular