I'm doing the following to test a POST call to Laravel. I'm expecting that POST to questions, in accordance with my routes, will be dispatches as the store action method. This works in the browser.
My test:
public function setUp()
{
parent::setUp();
Session::start();
}
public function testStoreAction()
{
$response = $this->call('POST', 'questions', array(
'_token' => csrf_token(),
));
$this->assertRedirectedTo('questions');
}
However, I tells me that the redirect doesn't match. Also, I can see that it isn't going to the store action method at all. I want to know what action method it is going to, and why it isn't going to the store method (if I look at route:list I can see there is a POST questions/ route that should go to questions.store; this also works in the browser, but not in my tests). Also, am I writing the call correctly for this resource? I added the token here as it was throwing an exception as it should, in some tests I will let the token check pass.
The most recommended way to test your routes is to check for
200
response. This is very helpful when you have multiple tests, like you are checking all of yourpost
routes at once.To do so, just use:
You could try this:
Laravel Unit cases without middleware
I use
in order to assert validation works. But to use this, you must start from the page that is going to send the post request. Like this:
Then if you want to test that the errors also being displayed correctly back. Run again above test with some changes as per below:
My guess is that if you dont start with the page to show the error, (the create / update page where you put the form), chain of session during the process will miss some important keys.
I was getting a
TokenMismatchException
and this fixed it, maybe it helps you too