在Ember.js中配置Testem的xunit输出

问题描述 投票:0回答:1

我使用Ember 5.6.0。运行

ember test --silent --reporter xunit > ember-test-result.xml
会输出包含以下内容的 XML:

<testsuite name="Testem Tests" tests="439" skipped="0" todo="0" failures="0" timestamp="Thu Jun 06 2024 12:07:57 GMT+0200 (Central European Summer Time)" time="13.557">
    <testcase classname="Chrome 125.0" name="acceptance/login-view-test.js: some test" time="0.157"/>
    <testcase classname="Chrome 125.0" name="acceptance/login-view-test.js: some other test" time="0.065"/>
    <testcase classname="Chrome 125.0" name="acceptance/login-view-test.js: some third test" time="0.072"/>
    <testcase classname="Chrome 125.0" name="Integration | components | parameter-tile: test this as well" time="0.047"/>
    <testcase classname="Chrome 125.0" name="Integration | helpers | equal: same values are equal" time="0.047"/>
    <testcase classname="Chrome 125.0" name="Integration | helpers | equal: different values are not equal" time="0.045"/>
    <testcase classname="Chrome 125.0" name="Integration | helpers | equal: strict equal comparision is used" time="0.046"/>
    <testcase classname="Chrome 125.0" name="Integration | Helper | greater: equals is false" time="0.037"/>
    <testcase classname="Chrome 125.0" name="Integration | Helper | greater: 2&gt;1 is true" time="0.038"/>
    <testcase classname="Chrome 125.0" name="Integration | Helper | greater: 1&gt;2 is false" time="0.036"/>
    <!-- ... about 400 more lines ... -->
</testsuite>

我想配置这个。

classname
应该是文件(也许带有路径?),
name
应该只是实际的 测试用例 的名称,诸如此类。
testsuite
的名称“Testem Tests”也不理想。有办法吗?

文档相当简约,但也许我错过了一些东西。或者也许我必须使用一些 Custom Reporter,但我希望从 xunit 继承,这是一个选项吗?

junit ember.js testem
1个回答
0
投票

我认为你必须编写一个自定义记者。 不知何故

这里是xunit记者代码供参考:https://github.com/testem/testem/blob/1c2a5bdb3beb5f52911deb738c204d569c33d511/lib/reporters/xunit_reporter.js#L6

您会遇到的一些挑战:

  • 文件名并不可靠地存在,因为测试可以来自非文件,并且所有测试都在运行时运行。
    • 您可以通过 lint 将文件名强制转换为测试名称来伪造它
  • 如何区分不同浏览器之间的套件?

为了以不同的方式管理名称,您可能会更好地对文件进行后处理。 例如:


let xml = fs.readFile('thefile.xml')
let parsedXML = someLibrary(xml);

parsedXML['testsuite'].forEach(suite => {
  suite['testcase'].forEach(case => {
    let [className, ...name] = case.name.split(':');
    case.className = className;
    case.name = name.join(':');
  })
})

// TODO: write the file 
© www.soinside.com 2019 - 2024. All rights reserved.