首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Laravel behat CSRF令牌

Laravel behat CSRF令牌
EN

Stack Overflow用户
提问于 2017-01-04 23:25:48
回答 1查看 227关注 0票数 0

我试着做第一次贝哈特测试,但当我运行它时,我得到了TokenMis.错误。我知道为什么。因为它没有将_token呈现到我的表单中。我向以下机构查询:

$this->getSession()->getPage()->getHtml()

我得到了:

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

诺马利一定是:

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

所以我的问题是我做错了什么?

我的特征看起来:

代码语言:javascript
复制
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

配置:

代码语言:javascript
复制
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):

代码语言:javascript
复制
<?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');
    }

}

与错误变量相同。抛出错误未定义错误变量

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-01-05 06:42:45

请将此CSRF辅助函数包含在刀片文件中。这将自动生成以下代码<input type="hidden" name="_token" value="2WXMw1BMY2o5irBKcXyzJBDeai9colsqFuVpNGXm">

代码语言:javascript
复制
 <form  action = "{{ url('test') }}" method="POST">
 {{ csrf_field() }} 
 ....
 ....
 </form>

编辑1:

我认为有一个具有behat laravel扩展本身的问题,而不是您的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41474938

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档