考虑以下StepObject:
str
现在我将在Cept中使用它:
namespace Step\Acceptance;
class UserStep extends \AcceptanceTester
{
public function login()
{
$I = $this;
$I->amOnPage('/user/login');
$I->fillField('username', 'user');
$I->fillField('password', '123456');
$I->click('Login');
}
}
在上述方案中,用户将登录一次并尝试完成所有列出的任务。
现在,我将在Cest中使用相同的原则:
use Step\Acceptance\UserStep;
$I = new UserStep($scenario);
$I->login();
// change e-mail
// change password
// change profile
// etc
// log out
现在,当我运行测试时,使用Cest,用户实际上会 4次。如果我使用class UserCest
{
function changeEmail(\Step\Acceptance\UserStep $I)
{
$I->login();
// task
}
function changePassword(\Step\Acceptance\UserStep $I)
{
$I->login();
// task
}
function changeProfile(\Step\Acceptance\UserStep $I)
{
$I->login();
// task
}
function logout(\Step\Acceptance\UserStep $I)
{
$I->login();
// task
}
}
或@before
注释以及使用@depends
时也会发生这种情况。
在使用Cest时,有没有办法保留并运行_before()
步骤对象一次?
答案 0 :(得分:0)
我认为写第一个测试
function login(\Step\Acceptance\UserStep $I) {
$I->login();
}
并让其他人依赖它
/**
* @depends login
*/
function changeEmail(\Step\Acceptance\UserStep $I)
{
$I->login();
// task
}
应该这样做。
答案 1 :(得分:0)
StepObject 应更改为以下内容:
public function login()
{
$I = $this;
if ($I->loadSessionSnapshot('login')) return;
$I->amOnPage('/user/login');
$I->fillField('username', 'user');
$I->fillField('password', '123456');
$I->click('Login');
$I->saveSessionSnapshot('login');
}
这不仅会保留并运行一次步骤对象,而且还可以方便地只显示一次控制台输出中的登录步骤。
另一个很大的便利是能够正确利用@before
注释。
例如,您可以从 BaseCest 调用登录步骤,因此现在可以在所有Cests中使用登录,并且您可以方便地在任何地方使用@before login
。