2016-12-07 99 views
0

我试图使断言随机文本在一个字段中输入出现下一个页面(确认)贝哈特从测试步骤

上传递一个值我不喜欢这样

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>" 

是否有可能?

UPDATE:

但如何将它看起来像getter和setter方法,如果我想使用一个generateRandomString方法多次,然后得到这个方法的值此起彼伏?我必须为每个测试步骤制作变量和函数吗?像这样:

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" 

回答

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); 
} 

注意该属性:根据您的贝哈特设置 - 断言出自PHPUnit可能无法正常工作。

1

既然你会打电话给在多个地方generateRandomString方法,那么你也应该有一个方法,让喜欢getRandomString像getter和setter方法这个值。

我的建议是有与处理所有的数据和变量在每一个你会使用数据,生成+保存和来自同一个地方你需要的地方阅读的地方不节能的相关方法的类。

提示:对于步骤定义,您可能会更灵活,并且在未提供一个随机字符串的情况下,可以使用默认长度。

高级别例如:

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]; 
    } 

}

在背景:

/** 
* @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 
} 

这是高水平的例子,你可能需要做一些调整。

如果你有在同一类的验证,那么你也可以拥有所有这些在同一个班级,与步骤相同类别含义generateRandomStringgetString