2017-01-04 21 views
0

私は最初の動作テストをしようとしていますが、実行するとTokenMis ...エラーが発生します。なぜだか知っているよ。私のフォームに_tokenを描画しないようにしてください。私は確認してください。Laravel behat CSRFトークン

ます$ this->のgetSession() - > GETPAGE() - > getHtml()

と私が得た:

<input type="hidden" name="_token" value="">

Normalyそれがなければなりません:

<input type="hidden" name="_token" value="Atf3lzQ7McA4zQorUu089X3zPsrLVRE8TvQkVOtm">

私の質問は間違っていますか?

私の機能はなります

Feature: User Login 
To test if user can login to system 

Scenario: Successful Authentication 
    Given I sign in "email" "pw" 
    Then I should be sign in 

構成:

default: 
    autoload: 
    '': %paths.base%/features/bootstrap 
    suites: 
    default: 
     contexts: 
     - 'FeatureContext' 
     paths: 
     - %paths.base%/features/default.feature 
    user_login_module: 
     contexts: 
     - 'UserLoginContext' 
     paths: 
     - %paths.base%/features/user-login.feature 
    extensions: 
    Laracasts\Behat: 
     env_path: .env.laravel.behat 
    Behat\MinkExtension: 
     default_session: laravel 
     base_url: http://localhost:8080 
     laravel: ~ 

FeatureContextファイル(UserLoginContext):

<?php 

use Behat\Behat\Context\Context; 
use Behat\Gherkin\Node\PyStringNode; 
use Behat\Gherkin\Node\TableNode; 
use Behat\MinkExtension\Context\MinkContext; 
use Laracasts\Behat\Context\Migrator; 
use Laracasts\Behat\Context\DatabaseTransactions; 
use PHPUnit_Framework_Assert as PHPUnit; 

class UserLoginContext extends MinkContext implements Context 
{ 
    use Migrator, DatabaseTransactions; 

    /** 
    * Initializes context. 
    * 
    * Every scenario gets its own context instance. 
    * You can also pass arbitrary arguments to the 
    * context constructor through behat.yml. 
    */ 
    public function __construct() 
    { 
    } 

    /** 
    * Loads Laravel classes 
    * 
    * @static 
    * @beforeSuite 
    * @return mixed 
    */ 
    public static function bootstrapLaravel() 
    { 
     $app = require __DIR__.'/../../bootstrap/app.php'; 

     $app->make(Illuminate\Contracts\Console\Kernel::class)->bootstrap(); 

     return $app; 
    } 

    /** 
    * @Given I sign in :email :password 
    */ 
    public function iSignIn($email, $password) 
    { 
     $this->visit('admin-panel'); 

     $this->fillField('email', $email); 
     $this->fillField('password', $password); 
     $this->pressButton('Prisijungti'); 
    } 

    /** 
    * @Then I should be sign in 
    */ 
    public function iShouldBeSignIn() 
    { 
     PHPUnit::assertTrue(Auth::guard('admin')->check()); 

     //$this->assertPageAddress('admin-panel/home'); 
    } 

} 

と同じように、エラー変数を持ちます。エラー未定義エラーが発生しました。

答えて

0

ブレードファイルにCSRF helper functionを含めてください。これにより、次のコード<input type="hidden" name="_token" value="2WXMw1BMY2o5irBKcXyzJBDeai9colsqFuVpNGXm">が自動的に生成されます。

<form action = "{{ url('test') }}" method="POST"> 
{{ csrf_field() }} 
.... 
.... 
</form> 

EDIT 1:

私はあなたのコードでbehat laravel延長自体にissueないがあると思います。

+0

Hmm ..セレンを使用してブラウザを開くと、その動作が表示されます。今私はそれがセレンなしで動作させる方法を考えています。 – Ernestyno

関連する問題