2013-04-16 3 views
18

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

सादर, जून

+0

मैं बहुत कि के बारे में पढ़ने के फीडबैक में intested होगी। मैं भी टीएफएस बिल्ड के दौरान कर्म परीक्षण करना चाहता हूं। क्या आपने इस पर कोई प्रगति की है? – Sam

+0

हाँ, यकीन है। इस समय, मेरे पास बैक एंड के लिए सी # में एक वेब प्रोजेक्ट है और एचटीएमएल/जेएस फ्रंट एंड के लिए है। मैंने अभी टीएफएस सर्वर पर कर्म चलाने के लिए एक परीक्षण धावक वर्ग बनाया है। विवरण के लिए मेरे स्वयं का जवाब देखें। – bigbearzhu

उत्तर

9

यहाँ सी # सहायक वर्ग का उपयोग कर TFS में कर्म को चलाने के लिए मेरी छद्म कोड है। मूल विचार यह है:

  1. कर्म का उपयोग करके अपनी जेएस फाइलों का परीक्षण करने के लिए सी # यूनिट परीक्षण का उपयोग करें।
  2. अपने निर्माण लॉग में दिखाने के लिए कर्म के आउटपुट को कैप्चर करें।
  3. कर्म चलाने के लिए अलग प्रक्रिया का उपयोग करें।
  4. सभी कर्म फ़ाइलों को एक ज़िप फ़ाइल में पैक करें, प्रत्येक निर्माण के लिए अस्थायी फ़ोल्डर में निकालें, ताकि कर्म के विभिन्न संस्करणों के साथ निर्माण एक दूसरे के साथ संघर्ष न करे।
  5. निर्माण के बाद अस्थायी फ़ोल्डर को साफ करें।

-

namespace Test.Javascript.CrossBrowserTests 
{ 
    public class KarmaTestRunner : IDisposable 
    { 
     private const string KarmaPath = @".\node_modules\karma\bin\karma"; 

     private string NodeBasePath { get; set; } 
     private string NodeFullPath { get { return NodeBasePath + @"\node\node.exe"; } } 
     private string NpmFullPath { get { return NodeBasePath + @"\node\npm.cmd"; } } 

     public KarmaTestRunner() 
     { 
      ExtractKarmaZip(); 
      LinkGlobalKarma(); 
     } 

     public int Execute(params string[] arguments) 
     { 
      Process consoleProcess = RunKarma(arguments); 
      return consoleProcess.ExitCode; 
     } 

     public void Dispose() 
     { 
      UnlinkGlobalKarma(); 
      RemoveTempKarmaFiles(); 
     } 

     private void ExtractKarmaZip() 
     { 
      NodeBasePath = Path.GetTempPath() + Path.GetRandomFileName(); 
      byte[] resourceBytes = Assembly.GetExecutingAssembly().GetEmbeddedResourceBytes(typeof(KarmaTestRunner).Namespace + "." + "karma0.9.4.zip"); 

      ZipFile file = ZipFile.Read(resourceBytes); 
      file.ExtractAll(NodeBasePath); 
     } 

     private void LinkGlobalKarma() 
     { 
      ExecuteConsoleProcess(NpmFullPath, "link", "karma"); 
     } 

     private Process RunKarma(IEnumerable<string> arguments) 
     { 
      return ExecuteConsoleProcess(NodeFullPath, new[] { KarmaPath }.Concat(arguments).ToArray()); 
     } 

     private static Process ExecuteConsoleProcess(string path, params string[] arguments) 
     { 
      //Create a process to run karma with arguments 
      //Hook up the OutputDataReceived envent handler on the process 
     } 

     static void OnOutputLineReceived(string message) 
     { 
      if (message != null) 
       Console.WriteLine(message); 
     } 

     private void UnlinkGlobalKarma() 
     { 
      ExecuteConsoleProcess(NpmFullPath, "uninstall", "karma"); 
     } 

     private void RemoveTempKarmaFiles() 
     { 
      Directory.Delete(NodeBasePath, true); 
     } 
    } 
} 

तो इस तरह इसका इस्तेमाल:

namespace Test.Javascript.CrossBrowserTests 
{ 
    [TestClass] 
    public class CrossBrowserJSUnitTests 
    { 
     [TestMethod] 
     public void JavascriptTestsPassForAllBrowsers() 
     { 
      using (KarmaTestRunner karmaRunner = new KarmaTestRunner()) 
      { 
       int exitCode = karmaRunner.Execute("start", @".\Test.Project\Javascript\Karma\karma.conf.js"); 
       exitCode.ShouldBe(0); 
      } 
     } 
    } 
} 
+0

धन्यवाद, यह बहुत दिलचस्प है। हालांकि आप यह नहीं दिखाते कि आप कैसे देखते हैं कि आपका यूनिट परीक्षण पास हो गया है या नहीं। मेरा मतलब है कि अगर कर्म परीक्षणों में से एक विफल हो गया है, तो आप कैसे सुनिश्चित करते हैं कि आपका निर्माण असफल हो रहा है? – Sam

+0

किसी भी मामले में कोई कर्म परीक्षण विफल हो गया, मुझे लगता है कि कर्मटेस्टरर 0 निकास कोड वापस नहीं करेगा। फिर यूनिट टेस्ट असफल हो जाएगा और इसलिए पूरा निर्माण होगा। – bigbearzhu

+0

ExecuteConsoleProcess विधि की सामग्री क्या है? – Marius

0

एक बहुत मूल प्रश्न और उत्तर के बाद से बदल गया है।

हालांकि, हम एक ग्रंट कार्य चलाकर हमारे टीएफएस निर्माण में चलाने के लिए कर्म प्राप्त कर चुके हैं (मुझे यकीन है कि गुलप के साथ भी यही संभव है/जो भी कार्य धावक है)। हम पहले सी # का उपयोग कर रहे थे, लेकिन हाल ही में बदल दिया।

  1. grunt build कार्य रन है।
  2. अपने gruntfile.js लिए फ़ाइल पथ कि
  3. बिंदु के बाद एक ग्रंट कार्य जोड़ें और अपने test काम चलाते हैं। यह कार्य karma:single चलाएगा। ग्रंट-क्ली स्थान node_modules/grunt-cli/bin/grunt हो सकता है।

    grunt.registerTask('test', [ 'karma:single' ]);

  4. एक प्रकाशित जोड़ें टेस्ट कदम परिणाम। टेस्ट परिणाम फ़ाइलें = **/*.trx

More information about publishing Karma Test Results

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