2013-04-30 8 views
26

असल में, मैं मोचा (हजारों यूनिट परीक्षणों के लिखित) के साथ काफी अनुभवी हूं, और मैं अंगुलरजेएस (केवल मेरी पहली परियोजना लिखी गई) के लिए काफी नया हूं।मैं मोचा का उपयोग करके एंगुलरजेएस कोड का परीक्षण कैसे करूं?

अब मैं सोच रहा हूं कि मैं मोचा का उपयोग करके सभी अंगुलरजेएस सामग्री का परीक्षण कैसे कर सकता हूं।

मुझे पता है कि मोचा ब्राउज़र में चलता है, और मैंने पहले ही यह किया है। लेकिन मैं चीजों की संरचना और सेटअप कैसे करूं?

मुझे लगता है मैं की जरूरत है:

  • लोड AngularJS
  • लोड मोचा
  • मेरी परीक्षण लोड

परीक्षण में से प्रत्येक के भीतर, मैं एक नियंत्रक लोड करने के लिए की जरूरत है, एक सेवा , ... मापना। मैं उसको कैसे करू? मैं require.js या ऐसा ही कुछ उपयोग नहीं कर रहा, फ़ाइलें मूल रूप से निम्नलिखित सामग्री के साथ सिर्फ स्क्रिप्ट फ़ाइलें हैं:

angular.controller('fooController', [ '$scope', function ($scope) { 
    // ... 
}]); 

मैं कैसे संदर्भ और एक परीक्षण के भीतर है कि नियंत्रक का दृष्टांत करते हैं? एक ही सेवाओं, निर्देशों के लिए सच है, ...

मैं $scope के लिए mocks बनाने के लिए, $http & सह की जरूरत है। मेरे लिए, या क्या कुछ मदद है?

कृपया ध्यान दें कि मुझे पता है कि कर्म परीक्षण धावक (जिसे पहले टेस्टकुलर के रूप में जाना जाता है) है, लेकिन मैं अपने परीक्षण धावक को पूरी तरह से स्विच नहीं करना चाहता हूं।

+1

भले ही आप कर्म उपयोग नहीं कर रहे:

यहाँ एक दृष्टिकोण का एक उदाहरण है कि मैं मॉड्यूल, ब्राउज़र, और नोड मॉड्यूल, कि दोनों कोणीय में इस्तेमाल किया जा सकता मोचा परीक्षण के लिए सहित बनाने के लिए उपयोग है/टेस्टाकुलर, [कोणीय-बीज] (https://github.com/angular/angular-seed) में कुछ उदाहरणों पर नज़र डालें। वे दिखाते हैं कि परीक्षण के लिए अपने मॉड्यूल सेट अप करने के लिए आप 'कोणीय-मोक्स' का उपयोग कैसे करते हैं। – NilsH

+4

यह मोचा का उपयोग करके परीक्षण के लिए एक उपयोगी लेख है: http://www.yearofmoo.com/2013/01/full- स्पेक्ट्रम- टेस्टिंग-with-angularjs-and-testacular.html – zlog

+2

कोणीय-बीज परियोजना बहुत उपयोगी नहीं है क्योंकि यह चमेली का उपयोग कर रहा है। मोचा और उसके एडाप्टर का उपयोग कर उदाहरण क्यों नहीं हैं? –

उत्तर

14

कि करने का एक तरीका अपने परीक्षणों में Angular$injector उपयोग करने के लिए है:

myModule_test.js

suite('myModule', function(){ 
    setup(function(){ 
    var app = angular.module('myModule', []); 
    var injector = angular.injector(['myModule', 'ng']); 
    var service = injector.get('myService'); 
    }); 

    suite('myService', function(){ 
    test('should return correct value', function(){ 
     // perform test with an instance of service here 
    }); 
    }); 
}); 

अपने html इस के समान दिखना चाहिए:

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <title>myModule tests</title> 
    <link rel="stylesheet" media="all" href="vendor/mocha.css"> 
</head> 
<body> 
    <div id="mocha"><p><a href=".">Index</a></p></div> 
    <div id="messages"></div> 
    <div id="fixtures"></div> 
    <script src="vendor/mocha.js"></script> 
    <script src="vendor/chai.js"></script> 
    <script src="angular.min.js"></script> 
    <script src="myModule.js"></script> 
    <script>mocha.setup('tdd')</script> 
    <script src="myModule_test.js"></script> 
    <script>mocha.run();</script> 
</body> 
</html> 
3

हैं आप एक कोणीय सेवा बना रहे हैं जिसमें कोई निर्भरता नहीं है और यह आवश्यक नहीं है ly कोणीय विशिष्ट, आप अपने मॉड्यूल को कोणीय-अज्ञेयवादी तरीके से लिख सकते हैं, फिर इसके लिए एक अलग छोटा कोणीय रैपर लिख सकते हैं, या कोणीय की उपस्थिति के लिए परीक्षण कर सकते हैं, और सशर्त रूप से इसके लिए एक सेवा बना सकते हैं।

(function(global) { 
    //define your reusable component 
    var Cheeseburger = {}; 

    if (typeof angular != 'undefined') { 
     angular.module('Cheeseburger', []) 
      .value('Cheeseburger', Cheeseburger); 
    } 
    //node module 
    else if (typeof module != 'undefined' && module.exports) { 
     module.exports = Cheeseburger 
    } 
    //perhaps you'd like to use this with a namespace in the browser 
    else if (global.YourAppNamespace) { 
     global.YourAppNamespace.Cheeseburger = Cheeseburger 
    } 
    //or maybe you just want it to be global 
    else { 
     global.Cheeseburger = Cheeseburger 
    } 
})(this); 
संबंधित मुद्दे

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