我正在尝试断言在一个字段中输入的随机文本出现在下一页(确认)
我这样做
When I fill in "edit-title" with random value of length "8"
/**
* Fills in form field with specified id|name|label|value with random string
* Example: And I fill in "bwayne" with random value of length "length"
*
* @When /^(?:|I )fill in "(?P<field>(?:[^"]|\\")*)" with random value of length "(?P<length>(?:[^"]|\\")*)"$/
*/
public function fillFieldWithRandomValue($field, $length)
{
$field = $this->fixStepArgument($field);
$value = $this->generateRandomString($length);
$this->getSession()->getPage()->fillField($field, $value);
}
我想做断言 - 就像这样:
Then I should see text matching "<RANDOM VALUE ENTERED IN THE PREVIOUS STEP>"
有可能吗?
更新
但如果我想多次使用generateRandomString方法然后一个接一个地获取这些方法的值,那么使用setter和getter会是什么样子?我是否必须为每个测试步骤制作变量和函数?像这样:
When I fill in "x" with random value of length "8"
And I fill in "y" with random value of length "12"
And I go to other page
Then I should see text matching "VALUE ENTERED TO X"
And I should see text matching "VALUE ENTERED TO Y"
答案 0 :(得分:1)
您可以创建属性并在上一步中进行设置。并在下一个中使用它,但如果它有价值则断言它。 使用适当的可见性类型
定义该属性也是很好的和可读的/**
* @var string
*/
private randomString;
/**
* Fills in form field with specified id|name|label|value with random string
* Example: And I fill in "bwayne" with random value of length "length"
*
* @When /^(?:|I )fill in "(?P<field>(?:[^"]|\\")*)" with random value of length "(?P<length>(?:[^"]|\\")*)"$/
*/
public function fillFieldWithRandomValue($field, $length)
{
$field = $this->fixStepArgument($field);
$this->randomString = $this->generateRandomString($length);
$this->getSession()->getPage()->fillField($field, $this->randomString);
}
/**
*
* @Then /^(?:|I )should see that page contains random generated text$/
*/
public function assertPageContainsRandomGeneratedText()
{
//Assertion from phpunit
$this->assertNotNull($this->randomString);
$this->assertPageContainsText($this->randomString);
}
注意:根据您的behat设置 - 来自phpunit的断言可能无效。
答案 1 :(得分:1)
由于您将在多个地方调用 import Testfile
Testfile.greeting()
方法,因此您还应该有一种方法可以像{set}和getter这样获取generateRandomString
这个值。
我的建议是建立一个具有处理所有数据的相关方法的类,而不是在您将使用数据的每个地方保存变量,生成+保存并从您需要的任何地方读取。
提示:您可以对步骤定义更加灵活,并且如果没有提供随机字符串,则可以使用默认长度。
高级示例:
class Data { public static $data = array(); public static function generateRandomString($length = null, $name = null) { if ($name = null) { $name = 'random'; }; if ($length = null) { $length = 8; }; // generate string like $string = return self::$data[$name] = $string; } public static function getString($name = null) { if ($name = null) { $name = 'random'; }; // exception handling if (array_key_exists($name, self::$data) === false) { return null; } return self::$data[$name]; } }
在上下文中:
getRandomString
这是高级示例,您可能需要进行一些调整。
如果您在同一个班级中进行了验证,那么您也可以在同一个班级中拥有所有这些内容,这意味着/**
* @Then /^I fill in "x" with random value as (.*?)( and length (\d+))?$/
*/
public function iFillInWithRandomValue($selector, $name, $length = null){
$string = Data::generateRandomString($length, $name);
// fill method
}
/**
* @Then /^I should see text matching "first name"$/
*/
public function iShouldSeeTextMatching($variableName){
$string = Data::getString($variableName);
// assert/check method
}
和generateRandomString
在同一个班级中包含这些步骤。