Подтвердить что ты не робот

Возможность использования Karma с сборками TFS

Я новичок в Testacular (теперь Karma). Но я нашел, что он действительно мощный и удобный для автоматического тестирования JS с несколькими браузерами. Поэтому я хочу знать, можно ли использовать его как часть процедуры построения TFS для проведения автоматического тестирования кода JS? Если у кого-то есть предыдущий опыт, не могли бы вы сообщить нам, что заметить, чтобы мы не ошибались.

С уважением, Июнь

4b9b3361

Ответ 1

Вот мой псевдо-код для запуска кармы в TFS с использованием класса-помощника С#. Основная идея:

  • Используйте С# unit test для проверки ваших js файлов с помощью Karma.
  • Захват вывода Кармы, чтобы показать это в вашем журнале построения.
  • Используйте отдельный процесс для запуска кармы.
  • Загрузите все файлы Karma в zip файл, извлеките его во временную папку для каждой сборки, чтобы сборки с другой версией кармы не противоречили друг другу.
  • Очистите временную папку после сборки.

-

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);
            }
        }
    }
}

Ответ 2

С момента первоначального вопроса и ответа многое изменилось.

Тем не менее, мы получили Карму для запуска в нашей сборке TFS, запустив задачу Grunt (я уверен, что это возможно с Gulp/тем, у кого есть задание). Раньше мы использовали С#, но недавно изменили.

  • Запустите задачу grunt build.
  • Добавьте после этого задачу Grunt
  • укажите путь к файлу gruntfile.js и запустите задачу test. Эта задача будет выполняться karma:single. Место размещения grunt-cli может быть node_modules/grunt-cli/bin/grunt.

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

  • Добавить шаг публикации результатов теста. Файлы результатов теста = **/*.trx

Дополнительная информация о публикации результатов теста Karma