testing a POST using phpunit in laravel 4

2019-07-16 01:19发布

I have a route that does a POST to create data and I'm trying to test if everything should be working the way it should be.

I have a json string that will have the values that i want to test but so far the test is always failing when I run the test using phpunit:

Also,I know the json string is just a string but I'm also unsure of how to use the json string to test for input.

my route:

Route::post('/flyer', 'flyersController@store');

 public function testFlyersCreation()
{
    $this->call('POST', 'flyers');

    //Create test json string
    $json = '{ "name": "Test1", "email": "test@gmail.com", "contact": "11113333" }';

    var_dump(json_decode($json));



}

When i run phpunit, my error points to the call POST that says "undefined index: name"

2条回答
爱情/是我丢掉的垃圾
2楼-- · 2019-07-16 01:35

I'm not sure if i understand the question correctly, given the code example that actually does nothing, but if you're asking how to test a post route which requires json data in the request, take a look at the call() method:

https://github.com/laravel/framework/blob/4.2/src/Illuminate/Foundation/Testing/ApplicationTrait.php

raw post data should be in the $content variable.

I don't have Laravel 4 installed to test it, but it works for me in Laravel 5, where the function has just slightly different order of params:

public function testCreateUser()
{
    $json = '
    {
        "email" : "horst.fuchs@example.com",
        "first_name" : "Horst",
        "last_name" : "Fuchs"
    }';

    $response = $this->call('POST', 'user/create', array(), array(), array(), array(), $json);

    $this->assertResponseOk();
}
查看更多
放我归山
3楼-- · 2019-07-16 01:56

If you look at the source code of TestCase you can see that the method is actually calling

call_user_func_array(array($this->client, 'request'), func_get_args());

So this means you can do something like this

$this->client->request('POST', 'flyers', $json );

and then you check the response with

$this->assertEquals($json, $this->client->getResponse());

The error you are getting is probably thrown by the controller because it doesnt receive any data

查看更多
登录 后发表回答