2017-03-24 9 views
0

Laravel TestCaseでソートが正しく機能しているかどうかをテストしたいと思います。私は、単純なテストページがあります。Laravel order of elemets on page

<div id="values"> 
    @foreach(['Value1', 'Value2'] as $value) 
     <div class="test-class">{{$value}}</div> 
    @endforeach 
</div> 

を、今私は、最初の.TESTクラス要素が「VALUE1」が含まれているかどうかをテストします。私はさまざまなアプローチを試してきましたが、成功はありませんでした。ここでは最初のものです:

public function testSorting() 
{ 
    $this->visit(route('dummy')); 
    $this->see('Value1'); 
    $this->seeInElement('.test-class:first-of-type', 'Value2'); 
} 

この1つは例外が発生しました:

Symfony\Component\CssSelector\Exception\ExpressionErrorException: "*:first-of-type" is not implemented. 

は、その後、私は

$this->seeInElement('#values:first-child', 'Value2'); 

と私のテスト時に緑を試してみました。しかし、最初の子は'Value1'であるため、赤でなければなりません。それは完全に'を無視しました:ファーストチャイルド'部分。

は、その後、私は

$this->seeInElement('#values:nth-child(1)', 'Value2'); 

を試してみましたが、あまりにも緑ました。だから、このアプローチはうまくいきません。

私は何かを見逃しましたか?または、Laravelテストでページ上の要素の順序をテストする方法はありませんか?

答えて

0

を、私はそれを解決しました。キーは、\ Symfony \ Component \ DomCrawler \ Crawlerクラスを調べることでした。 first(),last()またはeq($ number)のような多くの便利なメソッドがあります。

あなたが トリムを取り除くことができます
public function seeInFirstElement($selector, $text) 
{ 
    $this->assertContains($text, trim($this->crawler->filter($selector)->first()->text())); 

    return $this; 
} 

()機能を、それと出力が失敗したテストの場合の見え方:私は私ののTestCaseクラスでこのメソッドを作成しました。 私のテストでは、このような構造を使って注文をテストします:

$this->seeInFirstElement('.test-class', 'Value1'); 
1

なく、あなたの具体的な質問のためのソリューションが、あなたの問題の回避策: あなたは、現在のループ反復の数が含まれている$loop->iterationヘルパー変数、とあなたのtest-class divを列挙することができます。

<div id="values"> 
    @foreach(['Value1', 'Value2'] as $value) 
     <div class="test-class" id="value_{{$loop->iteration}}">{{$value}}</div> 
    @endforeach 
</div> 

今すぐあなたのdivクラスは1から始まる列挙IDを持っていて、最初のdivを選択するためにあなたのテストでセレクタ#value_1を使用することができますので、

$this->seeInElement('#value_1', 'Value2');