2017-01-04 179 views
0

我试图做第一个behat测试,但是当我运行它时,我得到了TokenMis ...错误。我知道为什么。因为它没有渲染_token到我的形式。我检查有:Laravel behat CSRF令牌

$这个 - >的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> 

编辑1:

我觉得这是一个issue与贝哈特laravel扩展本身,而不是你的代码。

+0

嗯..当我使用硒,它打开浏览器的作品。现在我想如何让它在没有硒的情况下工作。 – Ernestyno