如何在Test Cafe错误中获取完整的堆栈跟踪

时间:2019-01-17 15:52:06

标签: exception automated-tests stack-trace e2e-testing testcafe

我一直在使用Test Cafe编写内部测试框架,其中动作(t.click)和断言(t.expect)并非直接写在规范中,而是在其他文件中定义和汇总的。

一切都很不错,直到测试没有失败:在这种情况下,Test Cafe报告程序在控制台中写入断言/操作失败以及相对代码段,但是我没有找到理解函数调用的完整堆栈跟踪的方法从我的测试一直到失败的断言。

如何确保在报告程序中提供完整的堆栈跟踪信息,并记录所有导致测试失败的函数调用的堆栈跟踪信息?

我知道原因应该与async/await is transpiled into generators的方式有关:错误的堆栈跟踪仅显示最后一次执行的等待,而不是所有先前的调用。

<section> ... </section>
<section class="section--modifier">
  <h1> ... </h1>
  <div>
    ...
    <button class="section__button">
      <div class="button__label">
        <span class="label__text">Hello!</span> <-- Target of my test
      </div>
    </button>
    ...
  </div>
</section>
<section> ... </section>
// 
// My spec file
//
import { Selector } from 'testcafe';

import {
  verifyButtonColor
} from './button';

fixture`My Fixture`
  .page`....`;

test('Test my section', async (t) => {
  const MySection = Selector('.section--modifier');
  const MyButton1 = MySection.find('.section__button');

  const MySection2 = Selector('.section--modifier2');
  const MyButton2 = MySection2.find('.section__button');

  ....
  await verifyButtonColor(t, MyButton1, 'green'); // it will fail!
  ....
  ....
  ....
  await verifyButtonColor(t, MyButton2, 'green');
});
//
// Definition of assertion verifyButtonColor (button.js)
//
import { Selector } from 'testcafe';

import {
  verifyLabelColor
} from './label';

export async function verifyButtonColor(t, node, expectedColor) {
   const MyLabel = node.find('.button__label');
   await verifyLabelColor(t, MyLabel, expectedColor);
}
// 
// Definition of assertion verifyLabelColor (label.js)
//
export async function verifyLabelColor(t, node, expectedColor) {
   const MyText= node.find('.label__text');
   const color = await MyText.getStyleProperty('color');

   await t.expect(color).eql(expectedColor, `Color should be ${expectedColor}, found ${color}`); // <-- it will FAIL!
}

我没有在报告器中看到的是我的测试失败,因为在“ verifyLabelColor”中定义的断言失败了(颜色不是绿色:(),

...
await t.expect(color).eql(expectedColor, `Color should be ${expectedColor}, found ${color}`);
...

但是在记者中,我没有任何证据表明由于随后的通话失败

- await verifyButtonColor(t, MyButton1, 'green');
- await verifyLabelColor(t, MyLabel, expectedColor);
- await t.expect(color).eql(expectedColor, `Color should be ${expectedColor}, found ${color}`);

有人遇到类似的问题吗?

一种替代方法是记录导致失败的选择器的“路径”,但是查看Test Cafe文档时,我没有发现这样做的可能性:知道断言在具有以下路径的元素上失败了至少有助于了解出了什么问题

.section--modifier .section__button .button__label .label__text

1 个答案:

答案 0 :(得分:2)

该主题与TestCafe建议有关:Have a multiple stacktrace reporter for fast analysis when a test fails

与此同时,您可以尝试以下记者:/testcafe-reporter-cucumber-json,或者您可以开发自己的reporter