Nie*_*dal 5 javascript automated-tests jestjs
当我的一个Jest测试失败时,我想存储一个屏幕截图,但仅当它失败时。
这里以我的测试代码为例,!passedafterEach中的部分不起作用。
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();
});
});
Run Code Online (Sandbox Code Playgroud)
使用茉莉花,我会做类似的事情:
var passed = jasmine.getEnv().currentSpec.results().passed();
Run Code Online (Sandbox Code Playgroud)
但是我找不到Jest的类似东西。也许还有另一种解决方案,例如对每个失败的期望进行截图?我尝试了一下try / catch,但是测试总是通过...
如果在afterEach中测试失败,如何与Jest核对?
afterEach.@Niels van Reijmersdal 走在正确的轨道上。然而,截取屏幕截图的缺点specDone是它在 后 afterEach运行,因此,如果其中有某些内容afterEach(例如,导航回几个屏幕),您最终截取的屏幕截图将无法代表错误发生的位置。这是一个答案,允许您在错误发生后立即截取屏幕截图。
添加自定义 Jasmine 报告器并将specStarted规范结果存储到jasmine.currentTest.
jasmine.getEnv().addReporter( {
specStarted: result => jasmine.currentTest = result
} );
Run Code Online (Sandbox Code Playgroud)
不直观的是,即使我们在specStarted结果出现之前将其存储,jasmine.currentTest存储对result对象的引用,该对象将在规范运行时动态更新,因此当我们在我们的 中访问它时afterEach,它将保存结果正确的规格。
检查failedExpectations您的情况afterEach并截取屏幕截图,看看是否有任何失败。
afterEach( async () => {
if ( jasmine.currentTest.failedExpectations.length > 0 ) { // There has been a failure.
await driver.takeScreenshot();
}
} );
Run Code Online (Sandbox Code Playgroud)
这是我如何在项目中解决它的示例:(假设 afterEach 仅用于截取屏幕截图,而不用于清理和其他导航)
const testIt = (name, action) => {
test(name, async () => {
try {
await action()}
catch (error) {
await screenshots.createScreenshot(page) //take screenshot
throw error
}
})
}
describe('Test scenario 1', () => {
testIt('test1 will Pass', async () => {
expect(true).toBe(true)
})
testIt('test2 will Fail', async () => {
expect(true).toBe(false)
})
afterEach(async () => {
//ignored
})
})
Run Code Online (Sandbox Code Playgroud)
我使用 jest-html-reporters,只有失败的测试才会有附件(此解决方案不需要任何其他配置)。结果:
看起来 jasmine 对象可以在 Jest 测试中使用,但 currentSpec 在 2.x 版本中已被删除。
我找到了使用茉莉花自定义报告的替代方案。只需确保您也将其移交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');
});
});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1813 次 |
| 最近记录: |