我正在为一个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参数发送的对象.请参阅下面的示例代码
原文链接:https://www.f2er.com/angularjs/142355.html$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());
我希望这可以帮助你测试用例