2013-09-04 6 views
6

मैं इस प्रश्न का प्रस्ताव दे रहा हूं कि मैं अपने "LoginCtrl" के लिए काम करने के लिए पहले से ही एक परीक्षण प्राप्त कर चुका हूं जो लगभग सटीक कार्य करता है। मुझे यकीन है कि यह वास्तव में कुछ छोटा है जो मैंने अनदेखा किया है। किसी भी मदद के लिए अग्रिम धन्यवाद :)

मैंने अपने परीक्षण के लिए httpBackend के लिए अपेक्षित मूल्य/प्रतिक्रिया निर्धारित की है, लेकिन जब मैं httpBackend.flush() चलाता हूं, तो ऐसा लगता है कि मैंने कभी उम्मीद नहीं की है।

परीक्षण कोड:

describe('user register', function() { 
    var scope, RegisterCtrl, httpBackend, userJohnDoe, userJohnDoeRegistered, Restangular; 


    // TEST 
    beforeEach(module('LR.User.Register')); 


    describe('RegisterCtrl', function() { 
     beforeEach(inject(function ($controller, _$httpBackend_, $rootScope, _Restangular_, $state) { 
      scope = $rootScope.$new(); 
      httpBackend = _$httpBackend_; 
      Restangular = _Restangular_; 

      // Models 
      userJohnDoeRegistered = { 
       "access_token": "YzEyZDhjNjBlY2EwMTMxMmQzZGIzYWY5NDY4OGYwMjMzMGVjNDU3MDVhY2U0YjJmNDc1ODI3NWU0ODkzZGNkMQ", 
       "expires_in": 7200, 
       "token_type": "bearer", 
       "scope": null, 
       "refresh_token": "MmFhMTQ5NzU4ODI5ZjE2Mjk3ZjNlYzEwYzJkMjc4M2NkZjY2MjVkMjIwNWQzODUxYWNiYzY3NzIyMzEwYzJhNg", 
       "user": { 
        "username": "johndoe", 
        "email": "[email protected]", 
        "id": 1, 
        "first_name": "John", 
        "middle_name": "f", 
        "last_name": "Doe", 
        "created": "2013-09-04T10:46:10-0500", 
        "updated": "2013-09-04T10:46:10-0500" 
       }, 
       "status": "success", 
       "status_code": 200, 
       "status_text": "OK" 
      }; 
      userJohnDoe = { 
       "email": "[email protected]", 
       "first_name": "John", 
       "middle_name": "f", 
       "last_name": "Doe", 
       password: 'test123X', 
       passwordSecond: 'test123X', 
       client_id: '1_3b5zgimwg4kkko4wksk4sw0o48040o8ws8og8kg4wsowwkc44s' 
      }; 

      httpBackend.whenPOST('/register', userJohnDoe).respond(userJohnDoeRegistered); 


      RegisterCtrl = $controller('RegisterCtrl', {$scope: scope, $state: $state, Restangular: Restangular}); 
     })); 
     afterEach(function() { 
      httpBackend.verifyNoOutstandingExpectation(); 
      httpBackend.verifyNoOutstandingRequest(); 
     }); 


     it('should be able to register a fake user', inject(function() { 
      var resolvedRegistration; 
      var cb = function (response) { 
       // Expect the userJohnDoe object 
       resolvedRegistration = sanitizeRestangularOne(response); 

       console.log(logTestHeader('REGISTRATION RESPONSE') + 
        JSON.stringify(resolvedRegistration, null, ' ')); 
      }; 

      // Set credentials 
      scope.user = userJohnDoeCredentials; 

      // Call login 
      var register = scope.register_user().then(function() { 
       cb(); 
      }); 
      scope.$digest(); 
      httpBackend.flush(); 
      expect(resolvedRegistration).toEqual(userJohnDoeRegistered); 
     })); 
    }); 


}); 

आउटपुट प्रतिक्रिया:

Chrome 29.0.1547 (Mac OS X 10.8.4) user register RegisterCtrl should be able to register a fake user FAILED 
    Error: Unexpected request: POST /register 
    No more request expected 
     at Error (<anonymous>) 
     at $httpBackend (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular-mocks/angular-mocks.js:959:9) 
     at y (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:64:282) 
     at g (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:62:272) 
     at r (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:96:140) 
     at r (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:96:140) 
     at /Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:97:293 
     at Object.g.$eval (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:104:502) 
     at Object.g.$digest (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular/angular.min.js:102:419) 
     at null.<anonymous> (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:74:19) 
    Error: Declaration Location 
     at window.jasmine.window.inject.angular.mock.inject (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/vendor/angular-mocks/angular-mocks.js:1781:25) 
     at null.<anonymous> (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:57:54) 
     at null.<anonymous> (/Users/bobothefrofro/Development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:9:5) 
     at /Users/bobothefrofro/Development/lr-phoenix/phoenix-client/src/app/user/register/register.spec.js:1:1 
+0

समस्या का पता लगाया, जानकारी के लिए मेरा जवाब देखें। –

उत्तर

1

मुझे पता चला कि यह क्या था। मेरा register_user() फ़ंक्शन $scope.user का संदर्भ दे रहा था, जिसे एक अपरिभाषित चर पर सेट किया जा रहा था: userJohnDoeCredentials (एक अलग चर नाम जो मैंने अपने पिछले परीक्षण के लिए उपयोग किया था)।

यह सुनिश्चित नहीं है कि मेरा आईडीई मेरे बारे में एक अनिर्धारित चर का संदर्भ क्यों दे रहा है, और यह मेरे सभी जेएसलिंट परीक्षणों को पार कर रहा था, इसलिए यह भी अजीब है, लेकिन मेह। यह तय है: डी केवल अगर मैं नकली अनुरोध वापस लौटा सकता हूं जो मैं चाहता हूं ...

+0

खुशी है कि आप इसे ठीक कर चुके हैं। मुझे मोजे पर तुम्हारा दर्द महसूस होता है। वे एक पूरी तरह से अलग जानवर हैं। – MBielski

3

मेरी पहली सोचा है कि कुछ एक अनुरोध कर रही है जब आप अपने नियंत्रक का दृष्टांत है। शायद अपने नियंत्रक घोषणा लाइन के बाद $ httpBackend.flush() जोड़ने का प्रयास करें और देखें कि क्या यह हल करता है। इसके अलावा, क्या आपके $ स्कोप चाहिए। $ Digest पहले के बजाय $ httpBackend.flush के बाद हो?

+0

'फ्लश()' कॉल को चारों ओर ले जाने का प्रयास किया, लेकिन किसी भी समय इसे 'डाइजेस्ट()' से पहले बुलाया जाता है, मुझे "फ्लश करने के लिए कोई लंबित अनुरोध नहीं मिलता है!" त्रुटि। ऐसा लगता है कि मेरी 'httpBackend.whenPOST' घोषणा –

+1

किसी भी कारण से फायरिंग नहीं कर रही है डिफ़ॉल्ट रूप से मेरा नियंत्रक एक अनुरोध विधि कहता है जो मेरे लिए यह समस्या पैदा कर रहा था। –

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