提问人:tony Stark 提问时间:11/13/2023 更新时间:11/16/2023 访问量:27
BDD 实现 for 循环并验证
BDD to implement for a loop and validate
问:
我有一个 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}`);
}
});
答:
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
我知道那里有很多违反“每个测试只有一个断言”的情况,但有时需要不止一个动作才能充分证明行为的价值,我更喜欢“每个测试只有一个行为方面”。
我宁愿看到这一点,而不是一些令人费解的东西,它实际上并没有证明你为什么希望这种行为起作用。
我还发现,使用特定的例子而不是关于代码应该做什么的模糊抽象是有帮助的,因为它更容易想象细节。因此,请尝试选择一些示例并在您的上下文中设置它们。
评论