2014-04-30 15 views
11

मैं अपने आवेदन fooApp, इस प्रकार परिभाषित के लिए एक कोणीय नियंत्रक का परीक्षण करना चाहते इंजेक्षन करने में विफल रहता परीक्षण बनाने के कई तरीकों का परीक्षण किया है, इस तरह:कोणीय नकली मेरी मॉड्यूल निर्भरता

'use strict'; 

describe('MainController test', function() { 

    var scope; 
    var controller; 

    beforeEach(function() { 
      angular.mock.module('ngRoute', []); 
      angular.mock.module('ngAnimate', []); 
      angular.mock.module('hmTouchEvents', []); 
      angular.module('cwfApp', [ 'ngRoute', 'ngAnimate', 'hmTouchEvents' ]); 

      angular.mock.inject(function ($rootScope, $controller) { 
       scope = $rootScope.$new(); 
       controller = $controller('MainCtrl', { 
        $scope: scope 
       }); 
      }); 
     }); 

     it('should display a list', function() { 
      console.log('-------------- Run Test 1 | ' + scope); 
      expect(scope.currentStep).toBe(1); 
     }); 

}); 

और परिणाम:

 Error: [$injector:modulerr] http://errors.angularjs.org/1.2.16-build.64+sha.245de33/$injector/modulerr?p0=undefined&p1=Error%3A%20%5Bng%3Aareq%5D%20http%3A%2F%2Ferrors.angularjs.org%2F1.2.16-build.64%2Bsha.245de33%2Fng%2Fareq%3Fp0%3Dfn%26p1%3Dnot%2520a%2520function%252C%2520got%2520undefined%0A%20%20%20%20at%20Error%20(%3Canonymous%3E)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A6%3A471%0A%20%20%20%20at%20wb%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A18%3A360)%0A%20%20%20%20at%20Qa%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A18%3A447)%0A%20%20%20%20at%20nc%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A31%3A191)%0A%20%20%20%20at%20Object.d%20%5Bas%20invoke%5D%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A33%3A176)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A32%3A254%0A%20%20%20%20at%20Array.forEach%20(native)%0A%20%20%20%20at%20r%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A7%3A298)%0A%20%20%20%20at%20e%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A32%3A9) 
     at Error (<anonymous>) 
     at d:/dev/foo/app/bower_components/angular/angular.min.js:6:471 
     at d:/dev/foo/app/bower_components/angular/angular.min.js:32:400 
     at Array.forEach (native) 
     at r (d:/dev/foo/app/bower_components/angular/angular.min.js:7:298) 
     at e (d:/dev/foo/app/bower_components/angular/angular.min.js:32:9) 
     at Object.$b [as injector] (d:/dev/foo/app/bower_components/angular/angular.min.js:35:98) 
     at workFn (d:/dev/foo/app/bower_components/angular-mocks/angular-mocks.js:2142:52) 
     at Object.window.inject.angular.mock.inject [as inject] (d:/dev/foo/app/bower_components/angular-mocks/angular-mocks.js:2133:37) 
     at null.<anonymous> (d:/dev/foo/test/jasmine/todo.test.js:15:22) 
    TypeError: Cannot read property 'currentStep' of undefined 
     at null.<anonymous> (d:/dev/foo/test/jasmine/todo.test.js:25:21) 
Chrome 31.0.1650 (Windows 7): Executed 1 of 1 (1 FAILED) ERROR (0.023 secs/0.015 secs)   

मैं भी beforeEach(angular.mock.module('cwfApp')); (प्रथम beforeEach पिछले कोड में के बजाय) के साथ परीक्षण किया गया है, लेकिन त्रुटि लगभग एक ही है।

मेरी karma.conf.js फ़ाइल के बारे में, मैं फ़ाइलों की यह सूची समूह:

files: [ 
     'app/bower_components/angular/angular.min.js', 
     'app/bower_components/angular-route/angular-route.min.js', 
     'app/bower_components/hammerjs/hammer.min.js', 
     'app/bower_components/angular-hammer/angular-hammer.js', 
     'app/bower_components/angular-mocks/angular-mocks.js', 

     'app/js/foo-application.js', 
     'app/js/foo-controllers.js', 
     'app/js/foo-services.js', 
     'app/js/foo-router.js', 

     'test/jasmine/*.js' 
    ], 

इंजेक्शन असफल रहा है, लेकिन मैं वास्तव में समझ में नहीं आता क्या याद आ रही है या मेरी विन्यास में गलत है। उपरोक्त स्टैकट्रैक बहुत अधिक स्पष्टीकरण नहीं देता है ...

कोई विचार?

मैं कोणीय 1.2.8 का उपयोग कर रहा हूं।

सादर

संपादित करें, @Engineer द्वारा प्रदान की कोड के साथ: त्रुटि लगभग एक ही है

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

beforeEach(angular.mock.inject(function($rootScope, $controller) { 
    scope = $rootScope.$new(); 
    controller = $controller('MainCtrl', { 
     $scope: scope 
    }); 
})); 

it('should display a list', function() { 
    console.log('-------------- Run Test 1 | ' + scope); 
    expect(scope.currentStep).toBe(1); 
}); 

:

Error: [$injector:modulerr] http://errors.angularjs.org/1.2.16-build.64+sha.245de33/$injector/modulerr?p0=cwfApp&p1=Error%3A%20%5B%24injector%3Amodulerr%5D%20http%3A%2F%2Ferrors.angularjs.org%2F1.2.16-build.64%2Bsha.245de33%2F%24injector%2Fmodulerr%3Fp0%3DngAnimate%26p1%3DError%253A%2520%255B%2524injector%253Anomod%255D%2520http%253A%252F%252Ferrors.angularjs.org%252F1.2.16-build.64%252Bsha.245de33%252F%2524injector%252Fnomod%253Fp0%253DngAnimate%250A%2520%2520%2520%2520at%2520Error%2520(%253Canonymous%253E)%250A%2520%2520%2520%2520at%2520http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A6%253A471%250A%2520%2520%2520%2520at%2520http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A20%253A260%250A%2520%2520%2520%2520at%2520http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A21%253A262%250A%2520%2520%2520%2520at%2520http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A32%253A69%250A%2520%2520%2520%2520at%2520Array.forEach%2520(native)%250A%2520%2520%2520%2520at%2520r%2520(http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A7%253A298)%250A%2520%2520%2520%2520at%2520e%2520(http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A32%253A9)%250A%2520%2520%2520%2520at%2520http%253A%252F%252Flocalhost%253A9876%252Fbase%252Fapp%252Fbower_components%252Fangular%252Fangular.min.js%253F5961971009303638e9ad386869316e8c83f67e56%253A32%253A86%250A%2520%2520%2520%2520at%2520Array.forEach%2520(native)%0A%20%20%20%20at%20Error%20(%3Canonymous%3E)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A6%3A471%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A32%3A400%0A%20%20%20%20at%20Array.forEach%20(native)%0A%20%20%20%20at%20r%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A7%3A298)%0A%20%20%20%20at%20e%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A32%3A9)%0A%20%20%20%20at%20http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A32%3A86%0A%20%20%20%20at%20Array.forEach%20(native)%0A%20%20%20%20at%20r%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A7%3A298)%0A%20%20%20%20at%20e%20(http%3A%2F%2Flocalhost%3A9876%2Fbase%2Fapp%2Fbower_components%2Fangular%2Fangular.min.js%3F5961971009303638e9ad386869316e8c83f67e56%3A32%3A9) 
     at Error (<anonymous>) 
     at d:/dev/foo/app/bower_components/angular/angular.min.js:6:471 
     at d:/dev/foo/app/bower_components/angular/angular.min.js:32:400 
     at Array.forEach (native) 
     at r (d:/dev/foo/app/bower_components/angular/angular.min.js:7:298) 
     at e (d:/dev/foo/app/bower_components/angular/angular.min.js:32:9) 
     at Object.$b [as injector] (d:/dev/foo/app/bower_components/angular/angular.min.js:35:98) 
     at workFn (d:/dev/foo/app/bower_components/angular-mocks/angular-mocks.js:2142:52) 
    TypeError: Cannot read property 'currentStep' of undefined 
     at null.<anonymous> (d:/dev/foo/test/jasmine/todo.test.js:20:21) 

मैं पुन: पेश करने के लिए एक बेला बनाने की कोशिश करेंगे मेरी समस्या ...

उत्तर

22

मेरी समस्या वास्तव में karma.conf.js में थोड़ी गलती के कारण थी।

var fooApp = angular.module('fooApp', [ 'ngRoute', 'ngAnimate', 'hmTouchEvents' ]); 

और मेरे karma.conf.js भार निम्न स्क्रिप्ट:

files: [ 
    'app/bower_components/angular/angular.min.js', 
    'app/bower_components/angular-route/angular-route.min.js', 
    'app/bower_components/hammerjs/hammer.min.js', 
    'app/bower_components/angular-hammer/angular-hammer.js', 
    'app/bower_components/angular-mocks/angular-mocks.js', 

    'app/js/foo-application.js', 
    'app/js/foo-controllers.js', 
    'app/js/foo-services.js', 
    'app/js/foo-router.js', 

    'test/jasmine/*.js' 
], ... 

लेकिन मॉड्यूल ngAnimate लोड नहीं हुई दरअसल, अपने आवेदन के रूप में पालन परिभाषित किया गया है।तो मैंने बस उस पंक्ति को जोड़ा:

'app/bower_components/angular-animate/angular-animate.min.js', 

और यह काम करता है!

2

आप परीक्षण में fooApp मॉड्यूल को फिर से परिभाषित कर रहे हैं।

आप इस तरह परीक्षण कोड में कोणीय के साथ इसे लोड करने के लिए की जरूरत है:

angular.mock.module('ngRoute', 'ngAnimate', 'hmTouchEvents', 'fooApp'); 
+0

हैलो। धन्यवाद। क्षमा करें, यह मेरे कोड पर किए गए कई परीक्षणों के कारण कॉपी/पेस्ट की एक त्रुटि थी। मैंने कोड परीक्षण और स्टैक त्रुटि संपादित की है। – romaintaz

+0

आपने मुझे खो दिया ... क्या आप एक पहेली बना सकते हैं जो समस्या को पुन: उत्पन्न करता है? क्या आप उम्मीद कर सकते हैं (नियंत्रक) .toBeDefined(); ? –

+0

मैं इस तरह के बेवकूफ बनाने की कोशिश करूंगा। मुझे आश्चर्य है कि क्या मुझे अपने नियंत्रक द्वारा आवश्यक 'fooService' के बारे में कुछ याद नहीं है, लेकिन मजाक नहीं बनाया गया है ... – romaintaz

1

इस तरह का प्रयास करें:

describe('MainController test', function() { 
    var scope; 
    var controller; 

    beforeEach(angular.mock.module('fooApp')); 
    beforeEach(angular.mock.inject(function($rootScope, $controller) { 
     scope = $rootScope.$new(); 
     controller = $controller('MainCtrl', { 
      $scope: scope 
     }); 
    }); 
    it('should display a list', function() { 
     console.log('-------------- Run Test 1 | ' + scope); 
     expect(scope.currentStep).toBe(1); 
    }); 
}); 

बात, आप समझने की जरूरत है अगर आप कुछ मॉड्यूल की घोषणा कर रहा है इसकी निर्भरताओं (जैसे angular.module('fooApp', [ 'ngRoute', 'ngAnimate', 'hmTouchEvents' ])) के साथ, जब आप अपने परीक्षणों पर मॉड्यूल (fooApp) इंजेक्ट करते हैं, तो आपको निर्भरता मॉड्यूल को इंजेक्ट करने की आवश्यकता नहीं होती है।

+0

निर्भरताओं के इंजेक्शन के बारे में जानकारी के लिए धन्यवाद। हालांकि, उस कोड को आजमाने में मेरी मदद नहीं हुई (सीएफ। मेरी संपादित पोस्ट)। – romaintaz

संबंधित मुद्दे