2012-11-09 8 views
7

नोट के साथ टेस्ट AngularJS नियंत्रक: मैं CoffeeScript

में सब कुछ लिख रहा हूँ मैं एक नियंत्रक के रूप में निम्नानुसार है:

angular.module('myApp').controller 'MyController', ($scope, $routeParams, Batch) -> 
    $scope.$on '$routeChangeSuccess',() -> 
     Batch.get {batchUuid: $routeParams.batchUuid}, (response) -> 
      $scope.batch_id = response.id 

नियंत्रक बैच संसाधन है, जिसमें खींचती इस प्रकार के रूप में परिभाषित:

angular.module('myApp').factory 'Batch', ($resource) -> 
    $resource '/batches/:batchUuid', {} 

इस प्रकार मैं इस के लिए एक मार्ग है:

$routeProvider.when('/batches/:batchUuid', 
    { templateUrl: 'batches-processing.html', controller: 'MyController' }) 

तो:

  • आप मार्ग /बैचों/22
  • यह MyController
  • यह चलाता है $ routeChangeSuccess
  • यह बैच संसाधन डायन पर प्राप्त कॉल का उपयोग करता है का दौरा मार्ग से बैच यूयूड
  • यह एक जेसन प्रतिक्रिया और assi वापस आता है

    describe 'Controllers', -> 
        beforeEach module 'myApp' 
         describe 'MyController', -> 
          scope = {} 
          ctrl= {} 
    
          beforeEach inject ($rootScope, $controller, Batch, $httpBackend) -> 
           scope = $rootScope.$new() 
           ctrl = $controller('MyController', ($scope: scope)) 
           #I imagine I need to use either my injected Batch resource or the httpBackend to fake/expect the ajax call here 
    
          it "Gets data from the resource and assigns it to scope",() -> 
           #How on earth do I test this 
    

    मैं $ httpBackend.expect ('/ एंडपॉइंट का उपयोग करके लोगों को देखा है: करने के लिए $ scope.batch_id

अब मैं इस परीक्षण करना चाहते हैं एक आईडी gns तो मैं एक इकाई परीक्षण के रूप में निम्नानुसार है। जेसन ')। प्रतिक्रिया ({आईडी: 1}) आदि लेकिन मैं ऐसा नहीं कर सकता। मेरा संसाधन यूआरएल मार्ग से बैच यूयूड पर निर्भर करता है। मैं एक परीक्षण को अनुकरण/नकली/कार्यान्वित कैसे कर सकता हूं जो मार्ग परिवर्तन को अनुकरण करेगा, $ मार्ग को ट्रिगर करेगा चेंजसेफ, मार्ग पारित करें संसाधन के लिए पैरामीटर, संसाधन प्राप्त करें और परिणाम का परीक्षण करें?

मैं इस पर अपने बालों को खींच रहा हूं और कोणीय दस्तावेज़ इसे कवर नहीं कर रहे हैं।

धन्यवाद!

उत्तर

10

आप नकली मार्ग बना सकते हैं और इसे अपने नियंत्रक में इंजेक्ट कर सकते हैं।

मैं अपने नकली के लिए जैस्मीन के createSpy का उपयोग करता हूं, लेकिन यह थोड़ा अधिक हो सकता है। एक उदाहरण here है जो दिखाता है कि कैसे नकली मार्ग पैराम बनाने और इंजेक्ट करना है।

+0

पौराणिक दोस्त। बस महान। –

+1

कॉफ़ीस्क्रिप्ट के लिए शून्य से एक? बू। प्रश्न स्वयं coffeescript –

0

यह जे एस बेला से पता चलता routeParams इंजेक्शन जा रहा है:

http://jsfiddle.net/rimian/wgctykea/

it('should take articleId as id if specified', inject(function ($controller) { 
    routeParams.articleId = 5; 

    ctrl = $controller('MyAppCtrl', { 
    $scope: scope, 
    $routeParams: routeParams 
    }); 

    expect(scope.id).toEqual(5); 
})); 
+0

में है क्या यह $ फ़िल्टर ऑब्जेक्ट के साथ भी काम करता है? –

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