BDD 实现 for 循环并验证

BDD to implement for a loop and validate

提问人:tony Stark 提问时间:11/13/2023 更新时间:11/16/2023 访问量:27

问:

我有一个 BDD 场景,它涉及向左滑动并检查页面上的文本,由于它是轮播,因此需要重复“n”次。

我的BDD看起来像

Given I am on the carousel page
When I swipe left three times
Then I should see the text "Page [Page Number]" on each page

我不确定我应该如何在此处添加步骤定义。如果我在 WHEN 子句下添加 swipeLeft() 逻辑,那么在 THEN 子句中添加相同的逻辑并验证其中的文本是多余的。

优化此方案的最佳方法应该是什么? 它是否完全摆脱了 WHEN 子句,而只是与 THEN 结合使用?请问我们可以在这里遵循的所有最佳实践。我相信用户操作应该包含在 WHEN 子句中

const carouselPage = require('./pages/carouselPage');

Given('I am on the carousel page', async () => {
  await browser.url('https://example.com/carousel');
});

Then('I perform five swipes left and verify page text', async () => {
  const page = new carouselPage();

  for (let i = 1; i <= 5; i++) {
    await page.swipeLeft();
    const text = await page.getText();
    expect(text).toEqual(`Page ${i}`);
  }
});
算法 循环 黄瓜 轮播 BDD

评论


答:

1赞 Lunivore 11/16/2023 #1

想想轮播的价值,以及如何举例说明这个价值。他们刷卡是为了什么?我希望是猫,因为我喜欢猫。所以这是我的场景:

Given the first three cats are Arcturus, Bob and Casper
When I go to the Cat Carousel page
Then I should see Arcturus
When I swipe right twice
Then I should see Casper
When I swipe left once
Then I should see Bob

我知道那里有很多违反“每个测试只有一个断言”的情况,但有时需要不止一个动作才能充分证明行为的价值,我更喜欢“每个测试只有一个行为方面”。

我宁愿看到这一点,而不是一些令人费解的东西,它实际上并没有证明你为什么希望这种行为起作用。

我还发现,使用特定的例子而不是关于代码应该做什么的模糊抽象是有帮助的,因为它更容易想象细节。因此,请尝试选择一些示例并在您的上下文中设置它们。