2015-06-05 4 views
7

मैं अपनी वेबसाइट पर जावास्क्रिप्ट के लिए इकाई परीक्षण जोड़ने की कोशिश कर रहा हूं। मैं वीएस2013 का उपयोग करता हूं और मेरी परियोजना एक एएसपी.नेट वेबसाइट है।किसी अन्य वर्ग के संदर्भ में QUnit परीक्षण कैसे बनाएं?

सिफारिशों (http://www.rhyous.com/2013/02/20/creating-a-qunit-test-project-in-visual-studio-2010/) मैं अब तक क्या किया है के आधार पर:

  1. बनाया नया ASP.NET अनुप्रयोग
  2. आयातित QUnit (NuGet का प्रयोग करके)
  3. "स्क्रिप्ट" जोड़ा लिंक js- करने में
  4. मेरी मूल वेबसाइट (फाइलें प्लेयरस्कील.जेएस - कंटेनर प्लेयरस्कील क्लास और ट्रेनिंग.जेएस - इसमें ट्रेनर और कुछ अन्य वर्ग शामिल हैं)
  5. नया फ़ोल्डर "टेस्टScripts"
  6. जोड़ा गया प्रशिक्षणTests.js फ़ाइल
  7. साधारण परीक्षण लिखा:

    test("Trainer should have non-empty group", function() { 
        var group = "group"; 
        var trainer = new Trainer(123, "Name123", group, 123); 
        EQUAL(trainer.getTrainerGroup(), group); 
    }); 
    

नोटिस: दूसरों के बीच में मेरी trainings.js फ़ाइल

function Trainer(id, name, group, level) { 
    ... 
    var _group = group; 
    this.getTrainerGroup = function() { return _group ; } 
}; 

जब मैं अपने परीक्षण को अंजाम मैं त्रुटि देखें: ट्रेनर से परिभाषित नहीं है ।

ऐसा लगता है कि मेरी कक्षा के संदर्भ में मान्यता नहीं है। मुझे लगता है कि फाइल जोड़ने की तरह पर्याप्त नहीं है, लेकिन मुझे क्या याद आया?

कक्षा के साथ मूल फ़ाइल के संदर्भ में जोड़ने और यूनिट परीक्षण चलाने में सहायता करें।

धन्यवाद।

पीएस प्रश्न 2: क्या मैं 2 फाइलों के संदर्भ जोड़ सकता हूं (मेरे यूनिट टेस्ट को एक और कक्षा की आवश्यकता होगी जो किसी अन्य फ़ाइल में है)? कैसे?

उत्तर

4

ताकि उन सभी को निष्पादित इससे पहले कि आप अपने परीक्षण चलाने के

<!DOCTYPE html> 
<html> 
    <head> 
     <meta charset="utf-8"> 
     <title>QUnit Test Results</title> 
     <link rel="stylesheet" href="/Content/qunit.css"> 
    </head> 
    <body> 
     <div id="qunit"></div> 
     <div id="qunit-fixture"></div> 
     <script src="/Scripts/qunit.js"></script> 
     <script src="/Scripts/PlayerSkill.js"></script> 
     <script src="/Scripts/trainings.js"></script> 
     <script src="/TestScripts/TrainingTests.js"></script> 
    </body> 
</html> 

आप क्योंकि उपयोग लिंक की गई फ़ाइलों नहीं वे मौजूद नहीं होगा चाहिए आप अपने इकाई परीक्षण फाइल करने के लिए अपने आवेदन के सभी प्रासंगिक तर्क जोड़ना चाहिए भौतिक रूप से स्क्रिप्ट फ़ोल्डर में।

यदि आप वास्तव में उनका उपयोग करना चाहते हैं तो आपको Visual Studio Intellisense को इस तरह की फ़ाइल के भौतिक पथ को हल करने देना चाहिए।

  1. प्रकार स्क्रिप्ट टैग <script src=""></script>
  2. प्लेस src विशेषता में कोट के अंदर कर्सर और CTRL + SPACE
  3. प्रेस अपनी फ़ाइलें खोजें और हल पथ अछूता जाने
  4. अपनी परियोजना स्थान बदलता है, तो आप अद्यतन करना होगा लिंक्ड फाइलें और स्क्रिप्ट संदर्भ भी।

{Edit1}

समाधान 2:

आप भी अपनी इकाई परीक्षण पृष्ठ बनाने के लिए एक MVC नियंत्रक और एक उस्तरा देखें इस्तेमाल कर सकते हैं और लिंक की गई फ़ाइलों के साथ ही अपेक्षा के अनुरूप काम करेंगे मुद्दा यह है कि आपके पास आपके प्रोजेक्ट में एक अतिरिक्त नियंत्रक होगा लेकिन यह बिल्कुल बुरा नहीं है अगर उदाहरण के लिए आप AJAX का उपयोग करके सामग्री लोड करने का परीक्षण करना चाहते हैं, जो ब्राउज़र द्वारा डिफ़ॉल्ट रूप से अवरोधित किया जाता है यदि वे स्थानीय फ़ाइल से चलाए जाते हैं।

समाधान 3:

तुम भी सेटअप सिर्फ अपने जावास्क्रिप्ट इकाई परीक्षण के लिए एक नया MVC परियोजना बस के रूप में आप आमतौर पर सेटअप अपने परीक्षण को रोकने के लिए किसी भी सर्वर साइड कोड के लिए एक नई परियोजना है और इस में मदद मिलेगी के साथ हस्तक्षेप कर सकते हैं अपने उत्पादन कोड

{संपादित करें 2}

समाधान 4:

जावास्क्रिप्ट पारिस्थितिकी तंत्र आप घुरघुराना या घूंट इस्तेमाल कर सकते हैं स्वचालित करने के भाग के रूप परीक्षण चलाने से पहले अपनी स्क्रिप्ट की अपनी परियोजना की प्रतिलिपि से अपनी परियोजना की प्रति। आप इस

var sourcefiles = [/*you project file paths*/]; 
gulp.task('default', function() { 
    return gulp.src(sourcefiles).pipe(gulp.dest('Scripts')); 
}); 

की तरह एक gulpfile.js लिखना और फिर यह एक कंसोल खोलकर और जब TrainingTests.js बुला आदेश gulp या gulp default

+0

टिप्पणी के पहले भाग के बारे में: "" में Ctrl + स्पेस को मारने से मदद नहीं मिलती है: वीएस वर्तमान वेब साइट से फ़ाइल को चुनने की अनुमति नहीं देता है। – Budda

+0

दूसरे भाग के बारे में: क्या आप मेरी मूल परियोजना में एमवीसी नियंत्रक और रेजर व्यू बनाने की सलाह देते हैं? मैं स्पष्ट रूप से इससे बचना चाहता हूं। लेकिन अगर मैं उन्हें टेस्ट-प्रोजेक्ट में बना देता हूं ... यह समस्या को कैसे हल करेगा? मैं अभी भी बाहरी फाइलों का संदर्भ नहीं दे सकता। क्या आप बाहरी जेएस-फाइलों को गतिशील रूप से लोड करने की सलाह देते हैं? – Budda

+0

@ बुड्डा पहले भाग के बारे में वीएस ** ** यदि आप फ़ाइल को लिंक के रूप में जोड़ते हैं तो पथ को हल करेंगे, अगर आपने इसे अभी तक नहीं जोड़ा है। मैंने पहले ही परीक्षण किया है और काम कर रहा है। दूसरे भाग के बारे में लोग आम तौर पर इकाई परीक्षणों के लिए अलग-अलग परियोजनाएं बनाते हैं ताकि आप जावास्क्रिप्ट के लिए एक अलग एमवीसी प्रोजेक्ट बना सकें, यह परियोजना के आकार और यूनिट परीक्षण की मात्रा पर निर्भर करता है। IMHO * सही तरीका * एक गल्प कार्य बनाना है और परीक्षण से पहले अपनी स्क्रिप्ट फ़ाइलों की प्रतिलिपि बनाना है लेकिन यह बहुत ही सरल परियोजनाओं के लिए जटिल हो सकता है। – devconcept

3

trainings.js तरह लग रहा है चल रहा परिभाषित नहीं है चला सकते हैं। ऐसा क्यों होता है इसके बारे में अधिक जानकारी के लिए this प्रश्न देखें! एक बार यह तय हो जाने पर यह काम करता है। और हाँ trainings.js के समान आप किसी भी फ़ोल्डर में तब तक कई फाइलें रख सकते हैं जब तक आप उन्हें सही तरीके से संदर्भित करते हैं। मैं एक नमूना बेला सुलभ बनाया है @http://plnkr.co/edit/PnqVebOzmPpGu7x2qWLs?p=preview

<body> 
    <div id="qunit"></div> 
    <div id="qunit-fixture"></div> 
    <script src="http://code.jquery.com/qunit/qunit-1.18.0.js"></script> 
    <script src="trainings.js"></script> 
    <script src="TrainingTests.js"></script> 
</body> 
+0

धन्यवाद, लेकिन मैं फ़ाइल का संदर्भ देना चाहता हूं। किसी अन्य वेबसाइट से जेएस को संदर्भित करने का प्रयास काम नहीं करता है। मेरा मानना ​​है कि वीएस और आईआईएस बस इसे रोकते हैं। – Budda

+0

ठीक है लेकिन आपके प्रश्न ने किसी अन्य सर्वर से जेएस फ़ाइल को संदर्भित करने की आवश्यकता के बारे में कुछ भी नहीं बताया :) – prem89

0

ठीक है, दो जवाब मुझे लगता है कि समस्या स्थानीय बनाना किया मदद की वजह से वास्तव में वी.एस. की अक्षमता परीक्षण परियोजना में फ़ाइल की जरूरत कॉपी करने के लिए किया गया था।

यह शायद कई तरीके से हल किया जा सकता, मैंने पाया एक, विचार से नकल: http://www.javascriptkit.com/javatutors/loadjavascriptcss.shtml

समाधान सरल है: टैग गतिशील

जोड़ने इस लक्ष्य को हासिल करने के लिए, मैं निम्नलिखित कोड जोड़ दिया है टैग में:

<script> 
    var fileref = document.createElement('script'); 
    fileref.setAttribute("type", "text/javascript"); 
    var path = 'path'; // here is an absolute address to JS-file on my web site 
    fileref.setAttribute("src", path); 
    document.getElementsByTagName("head")[0].appendChild(fileref); 

    loadjscssfile(, "js") //dynamically load and add this .js file 
</script> 

और मेरे परीक्षण (भी पहले jQuery के लिए संदर्भ के लिए आवश्यक)

$(document).ready(function() { 
     QUnit.test("Test #1 description", function() { ... }); 
    }); 
ले जाया गया

इसी तरह की दृष्टिकोण शुद्ध परीक्षण फ़ाइलों के लिए भी काम करती है।

+0

यह एक बहुत ही सरल कार्य के लिए एक ओवरकिल है। फ़ाइल के पूर्ण पथ के साथ स्क्रिप्ट टैग को शामिल करने के लिए यह वही है, केवल अंतर यह है कि बाद में जोड़ा जाता है जो किसी बिंदु पर यूनिट परीक्षणों के लिए एक समस्या हो सकती है क्योंकि आपको इस स्क्रिप्ट को लोड करने की प्रतीक्षा करनी होगी। इसके अलावा एक मुख्य समस्या भी है, आप इस विधि या अपनी वेबसाइट के बाहर की फाइलों के साथ जुड़ी फाइलों का संदर्भ नहीं दे सकते। आपको उन्हें पहले कॉपी करना होगा, जिसे आसानी से एक गल्प कार्य के साथ स्वचालित किया जा सकता है, या तो कोई अच्छा समाधान नहीं है। – devconcept

+0

मैं जावास्क्रिप्ट और कॉन्फ़िगरेशन/बिल्ड टूल्स में खराब हूं, इसलिए यदि मेरे पास कोई समाधान है जो काम करता है (विशेष रूप से यदि मैं इसे काम करने का लंबा रास्ता पारित करता हूं) तो मैं कभी-कभी इसे रोकता हूं। – Budda

+0

समस्या यह है कि आपके मामले में आपको बॉयलरप्लेट कोड लिखना होगा ताकि यह सुनिश्चित किया जा सके कि जब आप परीक्षण चलाते हैं तो स्क्रिप्ट लोड हो जाती हैं। ऐसा करने का नतीजा यह है कि जैसे ही प्रोजेक्ट बढ़ता है, आप अंडरटेरिनिस्टिक्स परीक्षणों के साथ समाप्त होते हैं। कभी-कभी आपके पास परीक्षण होगा जो किसी स्पष्ट कारण के लिए असफल हो जाता है और कारण यह है कि आपके परीक्षण निष्पादित होते हैं और स्क्रिप्ट समाप्त होकर कुछ मिलीसेकंड लोड हो जाती है। आपको उन सभी कारकों को हटाना होगा जो संभावित रूप से परीक्षण विफल कर सकते हैं। यही कारण है कि गतिशील रूप से जावास्क्रिप्ट जोड़ना एक अच्छा विचार नहीं है जब तक कि वास्तव में उचित नहीं है या यह परीक्षण का भी हिस्सा है। – devconcept

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