当我的一个Jest测试失败时,我想存储一个屏幕截图,但只有当它失败时。
这里是我的一段测试代码作为示例,afterEach中的**!passed
**部分不起作用。
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();
});
});
对于Jasmine,我会做这样的事情:
var passed = jasmine.getEnv().currentSpec.results().passed();
但是我找不到类似的Jest。也许有另一种解决方案,比如在每个失败的expect上截取屏幕截图?我在expect周围尝试了try/catch,但是测试总是通过...
如果我的测试在afterEach中失败了,我如何使用Jest进行检查?
4条答案
按热度按时间9o685dep1#
将当前spec结果保存在Jasmine中,并在
afterEach
中访问。specDone
中截图的缺点是它在**afterEach
之后运行,所以如果afterEach
中有什么东西,比如说,向后导航几个屏幕,您最终拍摄的屏幕截图并不能代表错误发生的位置。这是一个答案,允许您在错误发生后立即截图。*1.为
specStarted
添加一个自定义Jasmine报告程序,并将spec结果存储到jasmine.currentTest
。不直观的是,即使我们在结果进入之前将其存储在
specStarted
中,jasmine.currentTest
存储了对result
对象的引用,该引用将随着spec运行而动态更新,因此当我们在afterEach
中访问它时,它将正确地保存spec的结果。1.检查
afterEach
中的failedExpectations
,如果有任何故障,请截图。ggazkfy82#
下面是我在项目中解决这个问题的一个例子:(假设afterEach仅用于截图,而不用于清理和其他导航)
我使用jest-html-reporters,只有失败的测试才会有附件(这个解决方案不需要任何其他配置)。结果:
ql3eal8s3#
jasmine对象似乎可以在Jest测试中使用,但是currentSpec在2.x版本中被删除了。
我已经找到了一个使用Jasmine自定义报告的替代方案。只要确保您也将
driver.quit()
移动到报告器,因为您可能仍然需要测试后的驱动程序。下面是报告程序在测试结束时处理失败测试的简单示例:
knpiaxh14#
提供了不再工作的答案,因为jest现在使用的是
jest-circus
,而不是jasmine
。请参阅线程的可能解决方案:https://github.com/facebook/jest/issues/5292#issuecomment-1328993445