Cypress Gherkin 不应因 afterEach-hook 中的错误而停止套件执行

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

背景: 我有一个使用 cypress-cucumber-preprocessor 的 Cypress 项目。在功能文件中我定义了多个场景。每个场景都会在被测页面上执行一个操作并截取屏幕截图(有时是多个屏幕截图)。我使用 afterEach 挂钩将场景中拍摄的所有屏幕截图与其各自的基本图像进行比较。

Feature: Example
Scenario 1
Given logged user
When goes to homepage
Then take a screenshot
# Now a hook compares the screenshot to the base

Scenario 2
Given logged user
When user makes a deposit
Then take a screenshot
# Now a hook compares the screenshot to the base

Scenario 3
... etc. ...

挂钩在文件中实现,其中实现了不同视觉验证的所有 then 步骤。

Example:
Then('Then take a screenshot', () => {...})
Then('Then take a screenshot of element xyz and blackout the background', () => {...})

// The hook is implemented in this same file
afterEach(() => {
    cy.checkVisualResults();
});

预期行为: 如果上一个场景出现故障,我需要 Cypress 继续功能文件中的下一个场景。

观察到的行为: 如果在其中一种情况后屏幕截图与其基本图像的比较失败,赛普拉斯将停止“套件”(这意味着功能文件)的执行。错误是这样的:

Because this error occurred during a 
在每个
 hook we are skipping the remaining tests in the current suite
之后。

也许我需要把挂钩放在另一个地方。据我观察,它是在每个场景之后执行的,而不是在拍摄每个屏幕截图之后执行的。我还有其他功能文件,不使用场景,只是拍摄多个屏幕截图。在添加挂钩之前,Cypress 会直接将当前映像与基础映像进行比较,并停止运行这些功能文件中的剩余步骤。当挂钩就位并将捕获和比较分开后,我发现对于这些类型的特征文件来说它是有效的。我现在需要的是使其适应使用场景的功能文件。

cucumber cypress gherkin cypress-cucumber-preprocessor
1个回答
0
投票

你可以再做一步来代替使用

afterEach()
钩子吗?

Feature: Example
Scenario 1
Given logged user
When goes to homepage
Then take a screenshot
Then compare the screenshot to the base

步骤

Then('Then compare the screenshot to the base', () => {
  cy.checkVisualResults()
})

或合并到截图步骤中

Then('Then take a screenshot', () => {
  cy.screenshot()
  cy.checkVisualResults()
})

两种方法都应该将失败隔离到特定的失败测试。

© www.soinside.com 2019 - 2024. All rights reserved.