lavaral5单元测试,post方式提交,方式无法进入

原创 2015年07月10日 10:47:19

问题描述

在使用laravel5框架,写测试代码的时候,如果是POST方式提交的方法,方法不能正常调用,get方式则正常调用:
具体代码如下:
UserinfoTest:

public function testPostUserUpdate(){

    $user = new User(array('name' => 'qweqwe'));

    $this->be($user);

    $input = ['zbxname' =>'test','zbxpwd'=>'test'];

    $this->action('POST', 'UserinfoController@zbbixUserSet',$input);

    $this->action('get', 'UserinfoController@yyjrIndex');

    $this->assertResponseOk();

}

Routes:

Route::get('yyjrIndex','UserinfoController@yyjrIndex');
Route::post('zbbixUserSet','UserinfoController@zbbixUserSet');

解决方案:

第一种方式:

第一步:Session::start();
第二步:’_token’ => Session::token() 或者是 ‘_token’ => csrf_token(), // 手动加入 _token
$input = [‘zbxname’ =>’test’,’zbxpwd’=>’test’];

示例代码如下:

 //post测试方式一
    public function setUp(){
            parent::setUp();
            Session::start();// 开始session
    }
    public function testPostModifierPassword(){
        $user = new User(array('name' => 'qweqwe'));
        $this->be($user);
        $input = ['zbxname' =>'test','zbxpwd'=>'test'];
        $input['_token'] = csrf_token();
        $this->action('POST', 'UserinfoController@modifierPassword',$input);
        $this->assertResponseOk();
    }
    //post测试方式二
    public function testPostUserUpdate(){
        $user = new User(array('name' => 'qweqwe'));
        $this->be($user);
        Session::start();
        $input = ['zbxname' =>'test','zbxpwd'=>'test'];
        $input['_token'] = csrf_token();
        $this->action('POST', 'UserinfoController@zbbixUserSet',$input);
        $this->assertResponseOk();
    }

第二种方式

直接修改VerifyCsrfToken类中的验证方法,
参考网址:

第三种方式(不提倡)

1、在ApplicationTrait中,引入use Illuminate\Support\Facades\Session;
2、Illuminate\Foundation\Testing\ApplicationTrait中的action方法,
修改后为:

public function action($method, $action, $wildcards = [], $parameters = [], $cookies = [], $files = [], $server = [], $content = null)
    {
        $uri = $this->app['url']->action($action, $wildcards, true);
        //maoch 添加_token
        if($method=='POST'){
            if(empty($wildcards['_token'])){
                $parameters['_token'] = Session::token();
            }
        }
        return $this->response = $this->call($method, $uri, $parameters, $cookies, $files, $server, $content);
    }

3、在测试方法中,添加setUp()方法,

public function setUp(){
        parent::setUp();
        Session::start();// 开始session
}
版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Android - 定位方式,火星坐标系统,一键锁屏,MD5加密,骚扰拦截,黑名单数据库,增删改查单元测试

Android - 定位方式,火星坐标系统,一键锁屏,MD5加密,骚扰拦截,黑名单数据库,增删改查单元测试...

Android开发中单元测试的两种方式

Android开发中单元测试的两种方式 一位优秀的程序员也同样不能保证自己的程序没有bug,因此编写合适的测试程序是完全有必要的,这样也会降低程序在后期出现各种奇奇怪怪bug的可能,降低维护成本,未雨...

Visual Studio单元测试命令行方式之二

前面我们提高,在VS2010以及之前的版本中,使用的是MSTest.exe命令,而在VS2012,VS2013,VS2015版本中,都是VSTest.Console.exe命令了,MSTEST改为兼容...

Visual Studio单元测试命令行方式

我们都知道,使用MS Visual Studio可以创建单元测试用例,但是测试时需要打开编辑器,并且手动运行一些测试,这个对于自动构建,自动测试来说是不方便的,所以我们采用了命令行的方式进行单元测试。...

ContentProvider学习心得(中)--通过单元测试的方式完成对通讯录内容的操作

在基本了解了对内容提供者的操作之后,可以通过几个小例子来训练自己的所学。在很多应用中都需要访问通讯录,因此在这里我们通过单元测试和通讯录的内容提供者完成对通讯录中数据的操作,在通讯录数据库中有很多表,...

Python单元测试unittest加载方式之二:加载测试套件

Python、unittest

SpringMVC,MyBatis项目中兼容Oracle和MySql的解决方案及其项目环境搭建配置、web项目中的单元测试写法、HttpClient调用post请求等案例

要搭建的项目的项目结构如下(使用的框架为:Spring、SpingMVC、MyBatis):2.pom.xml中的配置如下(注意,本工程分为几个小的子工程,另外两个工程最终是jar包):其中pom.x...

Android单元测试,模拟http的get和post请求

不要界面,使用单元测试完成业务逻辑功能 一。配置文件: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 1...

Xcode 5 单元测试Demos

  • 2014年03月20日 13:21
  • 7.18MB
  • 下载

HTTP POST 提交方式

  • 2014年09月11日 17:58
  • 12KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:lavaral5单元测试,post方式提交,方式无法进入
举报原因:
原因补充:

(最多只允许输入30个字)