加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

angularjs – 测试具有JSON请求体的Laravel控制器

发布时间:2020-12-17 07:33:11 所属栏目:安全 来源:网络整理
导读:我正在为一个Laravel控制器编写一个phpunit测试,期望使用 JSON格式的主体发布请求. 控制器的简化版本: class Account_Controller extends Base_Controller{ public $restful = true; public function post_login() { $credentials = Input::json(); return
我正在为一个Laravel控制器编写一个phpunit测试,期望使用 JSON格式的主体发布请求.

控制器的简化版本:

class Account_Controller extends Base_Controller
{
    public $restful = true;

    public function post_login()
    {
        $credentials = Input::json();
        return json_encode(array(
            'email' => $credentials->email,'session' => 'random_session_key'
        ));
    }
}

目前我有一个测试方法正确地发送数据作为urlencoded表单数据,但我无法解决如何发送数据作为JSON.

我的测试方法(我在编写测试时使用github gist here)

class AccountControllerTest extends PHPUnit_Framework_TestCase {
    public function testLogin()
    {
        $post_data = array(
            'email' => 'user@example.com','password' => 'example_password'
        );
        Request::foundation()->server->set('REQUEST_METHOD','POST');
        Request::foundation()->request->add($post_data);
        $response = Controller::call('account@login',$post_data);
        //check the $response
    }
}

我在前端使用angularjs,默认情况下,发送到服务器的请求是JSON格式.我不想改变它发送一个urlencoded形式.

有谁知道我如何编写一个测试方法,为控制器提供一个JSON编码体?

这样做很简单.您可以将Input :: $json属性设置为要作为post参数发送的对象.请参阅下面的示例代码
$data = array(
        'name' => 'sample name','email' => 'abc@yahoo.com',);

 Input::$json = (object)$data;

 Request::setMethod('POST');
 $response = Controller::call('client@create');
 $this->assertNotNull($response);
 $this->assertEquals(200,$response->status());

我希望这可以帮助你测试用例

更新:原始文章可在这里http://forums.laravel.io/viewtopic.php?id=2521

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读