In this tutorial we're going to create a new Laravel package for the Auth tests we wrote in a previous tutorial.
We want to move this into it's own Laravel package service provider so that we can reuse these tests on any new Laravel project we start.
If you don't know how to create your own Laravel package please read one of my previous articles.
How To Create Your Own Laravel Package
The most important file we need to add to our package is the Service Provider, this will tell Laravel how to use our package. Now we need to think about the best way of importing our tests into our Laravel app.
We can store these tests into a stubs folder and copy them into our project tests folder. There are two ways we can do
this, by creating our own Laravel command to move the tests or we can reuse the functionality we get from php artisan
.
Looking at the Laravel documentation we can move files from the package to the project by using a number of different methods.
- publishes
- mergeConfigFrom
- loadRoutesFrom
- loadMigrationsFrom
- loadTranslationsFrom
- loadViewsFrom
As you can see there is a publishes
method that will copy the files from the package to the project. But if the files
already exist they will not be copied unless you use the --force
flag. This is exactly the functionality we want and
we can add this to the service provider by using the following code.
<?php
namespace Dappa\AuthTests;
use Illuminate\Support\ServiceProvider;
/**
* Auth test service provider
*/
class AuthTestsServiceProvider extends ServiceProvider
{
/**
* Bootstrap application services
*/
public function boot()
{
$this->publishes([
__DIR__ . '/Stubs/tests/Feature/Auth/ForgotPasswordTest.php' => base_path('tests/Feature/Auth/ForgotPasswordTest.php'),
__DIR__ . '/Stubs/tests/Feature/Auth/LoginTest.php' => base_path('tests/Feature/Auth/LoginTest.php'),
__DIR__ . '/Stubs/tests/Feature/Auth/RegisterTest.php' => base_path('tests/Feature/Auth/RegisterTest.php'),
__DIR__ . '/Stubs/tests/Feature/Auth/ResetPasswordTest.php' => base_path('tests/Feature/Auth/ResetPasswordTest.php'),
]);
}
}
Now we just need to move the test files into their own folder/repo with this service provider and add this service
provider to our config/app.php
file.
When the service provider is registered in your app.php
file you can use the command php artisan vendor:publish
command, this will give you a list of registered service providers. Enter the number for the auth tests service provider
and the tests will be moved into your project tests
folder.