Jestjs 如何在VSTS测试中发布Jest单元测试结果?

Jestjs 如何在VSTS测试中发布Jest单元测试结果?,jestjs,azure-pipelines-build-task,Jestjs,Azure Pipelines Build Task,我发现了一些特定于jest单元测试的版本,可以在VSTS构建测试结果选项卡中发布其结果。但是没有找到合适的解决方案。我扔了一些jest npm包,比如和jest json,去点击,但无法找到它的工作。下面的步骤对我来说很有效,我可以在构建中查看结果 安装 创建包含以下内容的jestTrxProcessor.js文件: var builder=require('jest-trx-results-processor'); 变量处理器=生成器({ 输出文件:“jestTestresults.trx”

我发现了一些特定于jest单元测试的版本,可以在VSTS构建测试结果选项卡中发布其结果。但是没有找到合适的解决方案。

我扔了一些jest npm包,比如和
jest json,去点击
,但无法找到它的工作。下面的步骤对我来说很有效,我可以在构建中查看结果

  • 安装

  • 创建包含以下内容的
    jestTrxProcessor.js
    文件:

    var builder=require('jest-trx-results-processor');
    变量处理器=生成器({
    输出文件:“jestTestresults.trx”
    });
    module.exports=处理器;
    
  • 更新的
    package.json
    文件应如下所示:

    “devDependencies”:{
    “笑话”:“^23.4.1”,
    “jest trx结果处理器”:“0.0.7”,
    “jsdom”:“^11.12.0”,
    ...
    },
    “脚本”:{
    “测试”:“开玩笑”
    },
    “笑话”:{
    ...,
    “testResultsProcessor”:“/jestTrxProcessor.js”
    }
    
  • npm测试添加
    npm
    。这将运行jest测试并将结果发布到
    jestTestresults.trx

  • 添加
    Publish Test Results
    以在VSTS测试中添加
    jestestresults.trx
    结果

  • 您将能够看到JEST测试和其他测试。

    我使用了一种不同的方法,b/c经过一些研究,我发现。我正在使用jest-junit的测试报告包(它比jest-trx结果处理器fwiw更近):

  • 将jest junit添加到
    package.json

    例如
    warneadd-djestjunit
    npmadd--savedevjestjunit

  • 添加VSTS任务以使用结果报告器运行Jest

    我用过,但你可以交替使用。我使用了以下任务参数:

    jest --ci --reporters=jest-junit --reporters=default --coverage --coverageReporters=cobertura --coverageReporters=html
    
    jest --ci --reporters=jest-junit --reporters=default
    
    因为我还想要代码覆盖率。要跳过代码覆盖率报告,请使用以下(npm或THEAN)任务参数:

    jest --ci --reporters=jest-junit --reporters=default --coverage --coverageReporters=cobertura --coverageReporters=html
    
    jest --ci --reporters=jest-junit --reporters=default
    
    请注意,
    --reporters=default
    在构建日志中是否有我想要的默认标准输出

  • 添加

    由于我们使用的是默认路径,测试结果文件将被写入
    ~/junit.xml

  • (可选)也添加一个

    如果您正在运行代码覆盖率,还可以添加一个发布代码覆盖率结果的任务:

  • 如果您使用的是YAML管道,这里是等效的YAML(请注意,我们使用的是纱线任务而不是npm任务,但这是可以更改的):

    -任务:geeklearningio.gl-vsts-tasks-warn.warn-task。Yarn@2
    displayName:“安装依赖项”
    投入:
    参数:安装--无进展
    -任务:geeklearningio.gl-vsts-tasks-warn.warn-task。Yarn@2
    displayName:“单元测试”
    投入:
    参数:“test--ci--reporters=jest-junit--reporters=default--coverage--coverageReporters=cobertura”
    continueOnError:true#测试失败应在生成失败之前发布
    -任务:PublishTestResults@2
    displayName:“发布Jest单元测试结果”
    投入:
    testResultsFiles:junit.xml
    mergeTestResults:true
    testRunTitle:“Jest单元测试”
    failTaskOnFailedTests:真
    -任务:PublishCodeCoverageResults@1
    displayName:“从Jest测试发布代码覆盖率”
    投入:
    codeCoverageTool:Cobertura
    summaryFileLocation:“$(System.DefaultWorkingDirectory)/coverage/cobertura coverage.xml”
    #reportDirectory:“$(System.DefaultWorkingDirectory)/coverage”
    failifcoverage空:对
    
    Evaldas'解决方案已过时,因此我将添加一些修改

    更现代的解决方案是Evaldas与维护人员的结合:

    我将在下面这样描述它

  • 安装jest trx结果处理器

    # NPM
    npm install jest-trx-results-processor --save-dev
    
    # Yarn
    yarn add -D jest-trx-results-processor
    
  • 更新的
    package.json
    文件应如下所示:

    “devDependencies”:{
    “玩笑”:“^24.9.0”,
    jest trx结果处理器“^1.0.2”
    ...
    },
    “脚本”:{
    “测试”:“开玩笑”
    },
    “笑话”:{
    ...,
    “记者”:[
    “默认”,
    [
    “jest trx结果处理器”,
    {
    “outputFile”:“/src/jestTestresults.trx”,
    “defaultUserName”:“自动检测失败时使用的用户名”
    }
    ]]}
    
  • npm
    任务添加到VSTS构建中,以在构建管道中进行
    npm测试。应该是这样的:
    

  • 添加
    发布测试结果
    VSTS任务,以在VSTS测试中添加
    jestestresults.trx
    结果。为此,在构建管道中,单击“添加符号”。查找“发布测试结果”。会出现这样的菜单。因为它是一个.trx文件,所以需要使用VSTest而不是JTest。
  • 最后,前端项目的构建管道如下所示:

  • 谢谢,这帮了大忙。总的来说,只有两个问题可以解决。一个是“测试文件”过滤器将每个jest测试显示为一个单独的文件,而不是“vstest”程序集的每个dll/exe,但这并不太糟糕,因为至少每个测试都单独显示。另一个问题是,构建似乎仅限于一个“覆盖率”结果,我构建了一个web包捆绑包,该捆绑包进入ASP.NET web应用程序。web应用程序vstest覆盖覆盖率覆盖了jest覆盖率,但我仍然有完整报告的工件,所以两者都有。RE第一个问题-您检查了junit.xml文件了吗?看起来对吗?您可以调整jest junit reporter通过配置发出属性的方式。第二个问题听起来像是Azure DevOps中的一个缺陷(每个构建计划不支持超过1个覆盖率报告)——最好报告它。我没有这个问题,b/c到目前为止,我们的UI代码是在一个独立于服务器代码的构建计划中构建的。我看了看,它看起来“正常”,但不确定它是如何映射到azure DevOps期望的。将玩一点,看看配置是否可以调整以获得更好的结果。非常有用的答案。您可能还需要考虑<代码> StuteOnError:Trime< /Cord>(任务)