php – 我可以使用其中一个场景作为我的元步骤,而不是在Context类中定义它吗?
作者:互联网
我需要定义元步骤,就像我在订单购物车中有一个项目.但是,不是在Context类中为此步骤创建定义,而是仅使用某些功能文件中的现有步骤.因为我已经有测试功能的场景添加项目到订购购物车.
有没有现成的解决方案?我认为它是非常流行的用例,并且必须比在Context类中定义元步骤有更好的解决方案.
解决方法:
简答:不.
我知道它可能看起来像一个非常有用的功能,但它会让你很快回复,导致步骤/场景之间不必要的依赖关系导致脆弱的测试.
解决方案是将您的上下文文件视为功能文件和PHP代码之间的桥梁.这意味着上下文文件方法很简短,并将大部分工作委托给其他对象.这样,上下文之间没有重复,您只需调用其他对象:
/**
* @Given I open the product page
*/
public function iOpenTheProductPage()
{
$this->productPage->open();
}
/**
* @Given I add a :product to the cart
*/
public function iAddProductToTheCart($product)
{
$this->productPage->addToCart($product);
}
/**
* @Given I have an item in the cart
*/
public function iHaveAnItemInTheCart()
{
// reuse
$this->productPage->open();
$this->productPage->addProduct('Behat t-shirt');
// ... or put the items directly to the db!
}
此外,在实践中,根据我们正在测试的内容,将项目添加到购物车可能看起来有点不同.
如果您正在处理“添加到购物车”方案,您可能希望完成访问该页面并将产品添加到购物车的过程.
但是,如果您正在使用“在标题中查看迷你购物车”方案,则可以使用快捷方式使测试套件更快一些.在Givens中,当你说“鉴于我在购物车中有一个项目”时,你可能只是将一个项目直接放入数据库/会话/其中的任何内容.您可以买得起这种快捷方式,因为您已经在其他方案中将项目添加到购物车.
顺便说一句,如果您自动化测试Web应用程序,您会发现像page objects这样的模式非常有用.
标签:php,bdd,behat,gherkin 来源: https://codeday.me/bug/20190609/1207453.html