Added initial support for parallel testing

This commit is contained in:
Dan Brown 2022-09-26 21:25:32 +01:00
parent aec772c5eb
commit e18033ec1a
No known key found for this signature in database
GPG key ID: 46D9F943C24A2EF9
5 changed files with 23 additions and 6 deletions

View file

@ -17,7 +17,9 @@ use GuzzleHttp\Client;
use Illuminate\Contracts\Cache\Repository;
use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Blade;
use Illuminate\Support\Facades\ParallelTesting;
use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\View;
@ -64,6 +66,11 @@ class AppServiceProvider extends ServiceProvider
// Set paginator to use bootstrap-style pagination
Paginator::useBootstrap();
// Setup database upon parallel testing database creation
ParallelTesting::setUpTestDatabase(function ($database, $token) {
Artisan::call('db:seed --class=DummyContentSeeder');
});
}
/**

View file

@ -44,6 +44,7 @@
"ssddanbrown/htmldiff": "^1.0.2"
},
"require-dev": {
"brianium/paratest": "^6.6",
"fakerphp/faker": "^1.16",
"itsgoingd/clockwork": "^5.1",
"mockery/mockery": "^1.4",

View file

@ -252,6 +252,7 @@ export function build(options) {
document_base_url: window.baseUrl('/'),
end_container_on_empty_block: true,
remove_trailing_brs: false,
keep_styles: false,
statusbar: false,
menubar: false,
paste_data_images: false,

View file

@ -26,6 +26,7 @@ use Illuminate\Foundation\Testing\DatabaseTransactions;
use Illuminate\Foundation\Testing\TestCase as BaseTestCase;
use Illuminate\Http\JsonResponse;
use Illuminate\Support\Env;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log;
use Illuminate\Testing\Assert as PHPUnit;
use Monolog\Handler\TestHandler;
@ -299,6 +300,8 @@ abstract class TestCase extends BaseTestCase
/**
* Run a set test with the given env variable.
* Remembers the original and resets the value after test.
* Database config is juggled so the value can be restored when
* parallel testing are used, where multiple databases exist.
*/
protected function runWithEnv(string $name, $value, callable $callback)
{
@ -311,7 +314,12 @@ abstract class TestCase extends BaseTestCase
$_SERVER[$name] = $value;
}
$database = config('database.connections.mysql_testing.database');
$this->refreshApplication();
DB::purge();
config()->set('database.connections.mysql_testing.database', $database);
$callback();
if (is_null($originalVal)) {

View file

@ -322,8 +322,8 @@ class ThemeTest extends TestCase
public function test_export_body_start_and_end_template_files_can_be_used()
{
$bodyStartStr = 'barry-fought-against-the-panther';
$bodyEndStr = 'barry-lost-his-fight-with-grace';
$bodyStartStr = 'garry-fought-against-the-panther';
$bodyEndStr = 'garry-lost-his-fight-with-grace';
/** @var Page $page */
$page = Page::query()->first();
@ -342,18 +342,18 @@ class ThemeTest extends TestCase
protected function usingThemeFolder(callable $callback)
{
// Create a folder and configure a theme
$themeFolderName = 'testing_theme_' . rtrim(base64_encode(time()), '=');
$themeFolderName = 'testing_theme_' . str_shuffle(rtrim(base64_encode(time()), '='));
config()->set('view.theme', $themeFolderName);
$themeFolderPath = theme_path('');
// Create theme folder and clean it up on application tear-down
File::makeDirectory($themeFolderPath);
$this->beforeApplicationDestroyed(fn() => File::deleteDirectory($themeFolderPath));
// Run provided callback with theme env option set
$this->runWithEnv('APP_THEME', $themeFolderName, function () use ($callback, $themeFolderName) {
call_user_func($callback, $themeFolderName);
});
// Cleanup the custom theme folder we created
File::deleteDirectory($themeFolderPath);
}
}