2017-09-08 18 views
1

Laravel Dusk内で、電子メールフィールドを空白のままにしておくと登録できない簡単なテストを作成しています。テストコードは、以下である:required属性は、このテストに合格フォーム入力から除去されるLaravel DuskでのHTML5検証のテスト

/** @test */ 
    public function a_user_cannot_register_without_filling_in_email_field() 
    { 
     $this->browse(function (Browser $browser) { 
      $browser->visit('/register') 
       ->type('password', $this->user->password) 
       ->type('password_confirmation', $this->user->password) 
       ->press('Register') 
       ->assertSee('The email field is required.'); 
     }); 
    } 

、それを添加した場合のテストが失敗します。

これをテストする別の方法はありますか?

答えて

0

私はこのテストに合格するために得るために管理している方法は、次の操作を実行することです:

appディレクトリ内helpers.phpを作成します。これは、ローカル環境の名前を反映するために

<?php 

/** 
* Helper to put novalidate on a form when testing 
*/ 

function disableValidationIfTesting() { 
    $env = env('APP_ENV'); 
    if ($env == 'local') { 
     echo 'novalidate'; 
    } else { 
     return; 
    } 
} 

変更:あなたは次のカスタム関数を作成することができ、このファイルはhelpers.phpインサイドあなたcomposer.json

"autoload": { 
    "classmap": [ 
     "database/seeds", 
     "database/factories" 
    ], 
    "files": [ 
     "app/helpers.php" 
    ], 
    "psr-4": { 
     "App\\": "app/" 
    } 
}, 

であなたのautoloadersに含まれていることを確認してください。場合によってはtestingでも構いませんが、私の場合はlocalです。テストは、あなたのform

{{ disableValidationIfTesting() }}に次のコードを追加して

その後、フォームにあなたがチェックしている - これはあなたのブレードファイル内の関数をレンダリングする方法です。私の例では

私はこのようにそれが含まれている:これは私が開発し、ローカルでテストしていたとき(本番サーバー上の夕暮れを使うべきではないとして)フォームがnovalidateなることを意味し

<form class="form-horizontal" method="POST" action="{{ route('register') }}" {{ disableValidationIfTesting() }}> 

ブラウザにHTML5検証をスキップさせ、標準のLaravel検証を続行できる属性が追加されました。

これを実行した後、私のテストはすべて問題を起こさない:D

0

私はこれにも苦労しています。私はHTML5の検証エラーがDOMでレンダリングされるとは考えていません。つまり、実際にレンダリングされているかどうかを確認することはできません。 (これは、duskで使用されているWebドライバが最終的にjavascriptを使用してウェブサイトの要素をクリックして値を取得するなどの理由で)

あなたの場合、HTML5検証によってフォームが送信できなくなっています。つまり、コードでデータの検証が行われないため、エラーメッセージが表示されず、duskには表示されないため、独自のエラーメッセージは表示されません。

私の場合、HTML5フォームの検証を無効にしました。クライアント側で有効なチェックが追加されましたが、最終的には重要ではありません。

関連する問題