Behat使用BeforeScenario vs Given

时间:2017-05-10 10:41:53

标签: behat mink

对于在每个场景之前真正需要设置的内容,然后使用BeforeScenario。

有时,某些情况只需要设置,但对于其中很大一部分。例如,如果场景需要常规用户帐户"存在,然后它继续作为该用户登录并做一些事情。

您可以创建一个@BeforeScenario @RegularUser方法,该方法将针对标记为@RegularUser的每个方案运行。所以场景最终看起来像:

@RegularUser
Scenario login as a regular user
  Given I am on the login page
  When I login to a regular user account
  Then the welcome screen is displayed

替代方案是

Scenario login as a regular user
  Given a regular user exists
  And I am on the login page
  When I login to a regular user account
  Then the welcome screen is displayed

"普通用户存在"将与创建常规用户的方法相关联。

使用第一种方法,我可以制作@AfterScenario @RegularUser,它将在方案结束后删除用户。所以这似乎是一件好事"。

但从BDD的角度来看,第二种方法看起来更好。但它的局限性在于,在场景结束时没有任何事情可以删除用户。

哪种方法更好?

1 个答案:

答案 0 :(得分:1)

在我看来,我会先选择。

问题是,两个选项都不太好,因为通常你添加了这个场景的上下文:

In order to ..
As a Regular User 
I need to ..

那应该显示你打算运行这个场景的意图。创建 RegularUser 的过程不会为方案本身增加价值。

然后,如果您需要在拥有普通用户的情况下进行确认 - 那么就可以了。但在我看来,这不是重点 - 然后第二个选项不是那么好 - 我们有上下文来添加这样的信息。

这就是为什么,我认为第一个选择(不理想,但更好的那个)是很好的解决方案。

我不知道Behat功能是按上下文设置用户,但标签选项应该更具弹性。