首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在TFS构建中使用Karma的可能性

在TFS构建中使用Karma的可能性
EN

Stack Overflow用户
提问于 2013-04-16 08:17:39
回答 2查看 3.3K关注 0票数 19

我是Testacular的新手(现在是Karma)。但是我发现它对于自动跨浏览器的JS测试来说非常强大。所以我想知道是否可以将它作为TFS构建过程的一部分来进行自动JS代码单元测试?如果任何人有经验,请告诉我们应该注意什么,这样我们就不会走错路。

向你致敬,君

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-09-03 09:31:40

下面是我使用C#助手类在TFS中运行karma的伪代码。基本思想是:

  1. 使用C#单元测试来测试使用Karma的js文件。
  2. 捕获Karma的输出以在您的生成日志中显示该输出。
  3. 使用单独的进程运行karma。
  4. 将所有karma文件打包到压缩文件中,并将其解压缩到每个生成的临时文件夹中,以便使用不同版本karma的生成不会相互冲突。

H19生成后清除temp文件夹。H210G211

-

代码语言:javascript
运行
复制
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);
        }
    }
}

然后像这样使用它:

代码语言:javascript
运行
复制
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);
            }
        }
    }
}
票数 9
EN

Stack Overflow用户

发布于 2017-02-21 05:36:41

与最初的问题和答案相比,发生了很大的变化。

但是,我们已经通过运行Grunt任务让Karma在我们的TFS构建中运行(我相信Gulp/您拥有的任何任务运行器都可以做到这一点)。我们以前使用的是C#,但最近改变了。

  1. 运行grunt build任务。
  2. 之后添加Grunt任务,将文件路径指向gruntfile.js并运行test任务。此任务将运行karma:single。grunt-cli位置可以是node_modules/grunt-cli/bin/grunt

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

  • Add一个发布测试结果的步骤。测试结果文件= **/*.trx

More information about publishing Karma Test Results

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16026731

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档