desicochrane / laravel-api-testing
Installs: 1 316
Dependents: 0
Suggesters: 0
Security: 0
Stars: 8
Watchers: 1
Forks: 1
Open Issues: 0
This package is not auto-updated.
Last update: 2016-10-09 15:25:46 UTC
README
Usage
composer require desicochrane/laravel-api-testing
For a demo, check out this presentation
For a walkthrough, checkout the blog.
Harness the power of Laravel's Validator to write tests like this:
use DesiCochrane\ApiTesting\ValidatesApi; class CafeApiTest extends TestCase { use ValidatesApi; /** @test */ public function it_shows_a_paginated_index_of_all_cafes() { $this->get('/api/v2/cafes') ->seeStatusCode(200) // Put the pagination data in a meta: { pagination: {...} } namespace ->seeCurrentPage(1, 'meta.pagination.current_page') ->seeTotalItems(100, 'meta.pagination.total') ->seePerPage(15, 'meta.pagination.per_page') ->seeCollection([ 'id' => ['required', 'integer'], 'name' => ['required', 'string'], 'description' => ['required', 'string'], 'address' => ['required', 'string'], // - Make these nested in the response under the `food_options` namespace // - Ensure actual boolean output and not truthy/falsy integers 'food_options.vegan' => ['required', 'strict_boolean'], 'food_options.vegetarian' => ['required', 'strict_boolean'], // These should not be visible 'created_at' => ['not_present'], 'updated_at' => ['not_present'], 'photos' => ['not_present'], ]); }
Which will test green for this:
{ "data": [ { "id": 14, "name": "Durgan, Herzog and Jacobs", "description": "Suscipit enim. Earum facilis consectetur non sed ipsam oditaut.", "address": "8784 Legros Track\nWest Marion, VA 12804-8004", "food_options": { "vegan": false, "vegetarian": true }, "photos": { "data": [ { "id": 87, "path": "http://lorempixel.com/400/650/?16981" }, { "id": 88, "path": "http://lorempixel.com/400/650/?15181" }, ] } } ], "meta": { "pagination": { "total": 100, "count": 15, "per_page": 15, "current_page": 1, "total_pages": 7, "links": { "next": "http://laravel.app/api/v2/cafes/?page=2" } } } }