Oto mój pseudo kod do uruchomienia karmę w TFS przy użyciu C# klasy pomocnika. Podstawową ideą jest:
- Użyj testu C#, aby przetestować pliki js za pomocą Karmy.
- Uchwyć wyjście Karmy, aby pokazać, że w dzienniku kompilacji.
- Użyj oddzielnej procedury, aby uruchomić Karmę.
- Spakuj wszystkie pliki Karmy do pliku zip, rozpakuj je do folderu tymczasowego dla każdej kompilacji, aby kompilacje z inną wersją karmy nie były ze sobą w konflikcie.
- Wyczyść folder tymczasowy po kompilacji.
-
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);
}
}
}
następnie używać go tak:
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);
}
}
}
}
Byłbym bardzo intested w Reading Graficznych o tym. Też chciałbym uruchomić testy Karmy podczas budowania TFS. Czy zrobiłeś jakieś postępy w tej sprawie? – Sam
Tak, jasne. W tej chwili mam projekt WWW w języku C# dla zaplecza i Html/JS dla front end. Właśnie utworzyłem klasę testową dla uruchamiania serwera Karma na TFS. Zobacz moją odpowiedź na moje szczegóły. – bigbearzhu