Reputation: 185
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
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
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