sfas
sfas

Reputation: 185

testing a POST using phpunit in laravel 4

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": "[email protected]", "contact": "11113333" }';

    var_dump(json_decode($json));



}

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

Upvotes: 3

Views: 2845

Answers (2)

bulhi
bulhi

Reputation: 51

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" : "[email protected]",
        "first_name" : "Horst",
        "last_name" : "Fuchs"
    }';

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

    $this->assertResponseOk();
}

Upvotes: 1

Klemen
Klemen

Reputation: 101

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

Upvotes: 0

Related Questions