2016-08-01 17 views
2

Ich teste ein Formular. Im Formular gibt es einige Kontrollkästchen, die denselben Namen haben, da mehrere Kontrollkästchen zur Auswahl stehen.PhpUnit testen, wie ein Kontrollkästchen zu überprüfen, wenn es mehrere Kontrollkästchen mit demselben Namen in einem Formular

So sind meine Kontrollkästchen wie folgt aus:

<div class="col-sm-10"> 
    <div class="checkbox"> 
     <input id="department_1" name="departments[]" type="checkbox" value="1"> 
     <label for="department_1">Sales</label> 
    </div> 
              <div class="checkbox"> 
     <input id="department_2" name="departments[]" type="checkbox" value="2"> 
     <label for="department_2">Marketing</label> 
    </div> 
              <div class="checkbox"> 
     <input id="department_3" name="departments[]" type="checkbox" value="3"> 
     <label for="department_3">Tech Help</label> 
    </div> 
</div> 

Mein Testcode ist wie folgt:

public function testUserCreation() 
    { 
     $this->be(User::find(10)); 

     $this->visit('/users/create') 
      ->type('First', 'first_name') 
      ->type('Last', 'last_name') 
      ->type('[email protected]', 'email') 
      ->type('123456', 'password') 
      ->type('123456', 'password_confirmation') 
      ->check('departments') 
      ->press('Submit') 
      ->seePageIs('/users'); 
    } 

Wenn ich zu überprüfen, ich versuche, wenn wirft Fehler:

InvalidArgumentException: Nothing matched the filter [permissions] CSS query provided for

Antwort

1

Der einzige Weg, wie ich das geschafft habe, war:

$this->visit('/users/create') 
    ->submitForm('Submit', [ 
     ... 
     ... 
     'departments[0]' => '1', 
     'departments[1]' => '2' 
    ]) 
    ->seePageIs('/users'); 

Beachten Sie, dass Sie, wenn Sie das erste und das letzte Element überprüfen möchten, der Reihenfolge folgen müssen, in der die Eingaben vorgenommen werden.

$this->visit('/users/create') 
     ->submitForm('Submit', [ 
      ... 
      ... 
      'departments[0]' => '1', 
      'departments[2]' => '3' // index 2 instead 1. 
     ]) 
     ->seePageIs('/users'); 
2

Wenn Sie den Index für das Kontrollkästchen mehrfach in Ihrem Formular und Test angeben, dann funktioniert es. Form:

<input id="department_1" name="departments[0]" type="checkbox" value="1"> 
<input id="department_2" name="departments[1]" type="checkbox" value="2"> 

Unit-Test:

public function testUserCreation() 
    { 
     $this->be(User::find(10)); 

     $this->visit('/users/create') 
      ->type('First', 'first_name') 
      ->type('Last', 'last_name') 
      ->type('[email protected]', 'email') 
      ->type('123456', 'password') 
      ->type('123456', 'password_confirmation') 
      ->check('departments[0]') 
      ->press('Submit') 
      ->seePageIs('/users'); 
    } 

benannte Indizes verwenden funktioniert auch.

<input name="departments[department_1]" type="checkbox" value="1"> 
// [...] 
$this->check('departments[department_1]');