यहाँ सी # सहायक वर्ग का उपयोग कर TFS में कर्म को चलाने के लिए मेरी छद्म कोड है। मूल विचार यह है:
- कर्म का उपयोग करके अपनी जेएस फाइलों का परीक्षण करने के लिए सी # यूनिट परीक्षण का उपयोग करें।
- अपने निर्माण लॉग में दिखाने के लिए कर्म के आउटपुट को कैप्चर करें।
- कर्म चलाने के लिए अलग प्रक्रिया का उपयोग करें।
- सभी कर्म फ़ाइलों को एक ज़िप फ़ाइल में पैक करें, प्रत्येक निर्माण के लिए अस्थायी फ़ोल्डर में निकालें, ताकि कर्म के विभिन्न संस्करणों के साथ निर्माण एक दूसरे के साथ संघर्ष न करे।
- निर्माण के बाद अस्थायी फ़ोल्डर को साफ करें।
-
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);
}
}
}
}
मैं बहुत कि के बारे में पढ़ने के फीडबैक में intested होगी। मैं भी टीएफएस बिल्ड के दौरान कर्म परीक्षण करना चाहता हूं। क्या आपने इस पर कोई प्रगति की है? – Sam
हाँ, यकीन है। इस समय, मेरे पास बैक एंड के लिए सी # में एक वेब प्रोजेक्ट है और एचटीएमएल/जेएस फ्रंट एंड के लिए है। मैंने अभी टीएफएस सर्वर पर कर्म चलाने के लिए एक परीक्षण धावक वर्ग बनाया है। विवरण के लिए मेरे स्वयं का जवाब देखें। – bigbearzhu