2016-12-07 1 views
0

ich, dass der Zufallstext in einem Feld auf der nächsten Seite (Bestätigung)Behat Wert Pass von einem Testschritt

Ich mache es wie dieses

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

erscheint eingegeben zu machen Behauptung bin versucht, als Ich möchte Behauptung machen - so etwas wie:

Then I should see text matching "<RANDOM VALUE ENTERED IN THE PREVIOUS STEP>" 

ist es möglich?

UPDATE:

Aber wie wäre es mit Getter und Setter aussehen, wenn ich ein generateRandomString Methode mehrfach verwenden wollen, und dann die Werte dieser Methoden eine nach der anderen zu bekommen? Muss ich Variablen und Funktionen für jeden Testschritt machen? wie folgt:

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" 

Antwort

1

Sie können eine Eigenschaft erstellen und im vorherigen Schritt festlegen. Und benutze es im nächsten, aber behaupte es, wenn es Wert hat. Auch wäre es schön und gut lesbar sein, dass die Eigenschaft mit Typ richtigen Sichtbarkeit

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

HINWEIS zu definieren: Je nach Behat Setup - Behauptung von phpunit möglicherweise nicht.

1

Da Sie die generateRandomString Methode an mehreren Stellen aufrufen werden, dann sollten Sie auch eine Methode haben, um diesen Wert wie getRandomString wie Setter und Getters zu bekommen.

Meine Empfehlung wäre, eine Klasse mit verwandten Methoden, die alle Daten behandeln und nicht speichern in Variable an jedem Ort, den Sie Daten verwenden, generieren + speichern und lesen von der gleichen Stelle, wo Sie brauchen.

Tipp: Sie könnten flexibler bei der Schrittdefinition sein und eine Standardlänge für die zufällige Zeichenfolge haben, falls eine nicht angegeben wird.

Hohe Beispiel:

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

}

Im Kontext:

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

Dieses hohe Niveau Beispiel ist, müssen Sie möglicherweise einige Anpassungen tun.

Wenn Sie die Validierung in der gleichen Klasse haben, dann können Sie auch alle diese in derselben Klasse haben, generateRandomString und getString in der gleichen Klasse mit den Schritten bedeutet.