eduardoarandah / autohttptests
Autogenerate http tests for laravel
Requires
- php: ^7.1|^8.0
- illuminate/support: ^7.0|^8.0
Requires (Dev)
- phpunit/phpunit: >=5.4.3
README
No more writing tests by hand =D
Just execute the command to record your actions as http tests
php artisan autohttptest:create
The command will intercept your requests and translate the response as a test.
When finished, your test will be saved in tests/Feature/
Demo in video
What does it test?
- Request acting as same user
- Make request using the same verb (GET,PUT,POST) with same arguments
- Assert http response code
- Assert errors
- Assert redirection
Example code
<?php
namespace Tests\Feature;
use Tests\TestCase;
class SomethingTest extends TestCase
{
public function testAutoHttpTest()
{
$this
->actingAs(\App\Models\User::find(1))
->post('home/something', [
'name' => 'a',
'lastname' => 'a',
'city' => '',
'hobbies' => '',
'twitter_username' => 'a',
])
->assertStatus(302)
->assertSessionHasErrors([
'name',
'country_id',
'twitter_username',
]);
$this
->actingAs(\App\Models\User::find(1))
->post('home/something', [
'name' => 'asdfa',
'lastname' => 'asdfa',
'country_id' => '1',
'city' => '',
'hobbies' => '',
'twitter_username' => 'asdfa',
])
->assertStatus(302)
->assertRedirect('home/something');
}
}
Note
Here we capture an unsuccessful post, with errors. Then, a successful post with redirection
Install
Via Composer
$ composer require eduardoarandah/autohttptests
If you are using laravel < 5.4 add to providers in config/app.php
EduardoArandaH\AutoHttpTests\AutoHttpTestsServiceProvider::class,
Usage
php artisan autohttptest:create
How does it work?
when you run php artisan autohttptest:create yourtest
it intercepts all requests and responses through a middleware.
The request is then analyzed and transformed into a test in a file storage/autohttptests.txt
If you're curious, you can see the building of that file in real time with
tail -f storage/autohttptests.txt
Credits
License
The MIT License (MIT). Please see License File for more information.