检查在每次开玩笑后测试是否失败

时间:2017-02-02 10:46:34

标签: javascript automated-tests jestjs

当我的一个Jest测试失败时,我想存储一个屏幕截图,但只有当它失败时才会存在。

以下是我的测试代码的一部分,afterEach中的 describe('Page', () => { it('should contain Text in the header', async () => { // Arrange const page = new Page(driver); // Act await page.open(); // Assert expect(await page.getHeaderText()).toBe('Something'); }); afterEach(async () => { if (!passed) takeScreenshot(); await driver.quit(); }); }); 部分无效。

  var passed = jasmine.getEnv().currentSpec.results().passed();

使用茉莉花,我会做类似的事情:

{{1}}

但我找不到类似于Jest的东西。也许还有另一种解决方案,比如对每个失败的预期截取屏幕截图?我尝试了一下try / catch,但测试总是通过......

如果我的测试在afterEach中失败,我怎样才能与Jest联系?

2 个答案:

答案 0 :(得分:4)

将当前规格结果存储在Jasmine中,并在afterEach中进行访问。

@Niels van Reijmersdal处在正确的轨道上。但是,在specDone中截取屏幕截图的缺点是,它在之后 afterEach之后运行,因此,如果afterEach中有某些内容可以向后导航屏幕上,您最终拍摄的屏幕截图将不代表错误发生的位置。这是一个允许您在错误发生后立即截图的答案。

  1. specStarted添加自定义的Jasmine报告程序,并将规范结果存储到jasmine.currentTest

    jasmine.getEnv().addReporter( {
      specStarted: result => jasmine.currentTest = result
    } );
    

    一个不直观的事情是,即使我们在结果存入之前将其存储在specStarted中,jasmine.currentTest也会存储对result对象的引用,该引用会动态更新随着规范的运行,因此当我们在afterEach中访问规范时,它将正确保存规范的结果。

  2. 在您的failedExpectations中检查afterEach,并在发生故障时进行截图。

    afterEach( async () => {
      if ( jasmine.currentTest.failedExpectations.length > 0 ) { // There has been a failure.
        await driver.takeScreenshot();
      }
    } );
    

答案 1 :(得分:2)

似乎jasmine对象可用于Jest测试,但currentcpec已在2.x版本中删除。

我找到了使用jasmine自定义报告的替代方法。只需确保将driver.quit()移动到记者,因为测试后可能仍需要驱动程序。

以下是报告人在测试结束时处理失败测试的一个简单示例:

const reporter = {
  specDone: async (result) => {
    if (result.status === 'failed') {
      takeScreenshot(result.description);
    }
    await driver.quit();
  },
};

jasmine.getEnv().addReporter(reporter);

describe('Page', () => {  
  it('should contain Text in the header', async () => {
    // Arrange
    const page = new Page(driver);

    // Act
    await page.open();

    // Assert
    expect(await page.getHeaderText()).toBe('Something');
  });
});