API test helpers

This repository makes it easier for you to test REST APIs.
We've added a couple of integration testing helpers that you can use.

test helperUsage
seeApiSuccess()Asserts response returned using success response macro:
return response()->success(..)
seeValidationError()Asserts response code is 422 and that the error is returned (you get that when Laravel throws a validation error or when you return response()->error('message', 422);
seeApiError($status_code)Asserts for specific status code error.. for example 401.
seeJsonKey($key)equivalent to ->see('"'.$key.'"'):
seeJsonValue($value)equivalent to ->see('"'.$value.'"')
seeJsonArray($entity)equivalent to ->see('"'.$entity.'":[')
Which is useful when you expect an array of Orders for example.
seeJsonObject($entity)equivalent to ->see('"'.$entity.'":{')
Which is useful when you expect a single Order for example.


Avoid using bcrypt() in your model factory. As it'll slow down your tests. Only use it if you want to know the password of the user model created (e.g.: in login, reset password tests).

Here's an example controller and integration test for it


$api->group([], function ($api) {

    $api->post('posts', 'PostsController@create');


use App\Post;

class PostsController{
   public function create(Request $request)
       $this->validate($request, [
         'name'   => 'required',
       $post = Post::create([
         'name' => $request->input('name'),
       return response()->success(compact('post'));

class CreatePostTest extends TestCase
    public function testCreatingNewPostSuccessfully()
        $post = factory(App\Post::class)->make();//we're not saving it in the database
        $this->post('/api/posts', ['name' => $post->name])
        ->seeJson(['name' => $post->name]);
        $this->seeInDatabase('posts', [
           'name' => $post->name,


Don't forget the /api/ at the beginning of the route in your test file.