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\Contracts\Cache\Repository;
use Illuminate\Database\Eloquent\Relations\Relation; use Illuminate\Database\Eloquent\Relations\Relation;
use Illuminate\Pagination\Paginator; use Illuminate\Pagination\Paginator;
use Illuminate\Support\Facades\Artisan;
use Illuminate\Support\Facades\Blade; use Illuminate\Support\Facades\Blade;
use Illuminate\Support\Facades\ParallelTesting;
use Illuminate\Support\Facades\Schema; use Illuminate\Support\Facades\Schema;
use Illuminate\Support\Facades\URL; use Illuminate\Support\Facades\URL;
use Illuminate\Support\Facades\View; use Illuminate\Support\Facades\View;
@ -64,6 +66,11 @@ class AppServiceProvider extends ServiceProvider
// Set paginator to use bootstrap-style pagination // Set paginator to use bootstrap-style pagination
Paginator::useBootstrap(); 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" "ssddanbrown/htmldiff": "^1.0.2"
}, },
"require-dev": { "require-dev": {
"brianium/paratest": "^6.6",
"fakerphp/faker": "^1.16", "fakerphp/faker": "^1.16",
"itsgoingd/clockwork": "^5.1", "itsgoingd/clockwork": "^5.1",
"mockery/mockery": "^1.4", "mockery/mockery": "^1.4",

View File

@ -252,6 +252,7 @@ export function build(options) {
document_base_url: window.baseUrl('/'), document_base_url: window.baseUrl('/'),
end_container_on_empty_block: true, end_container_on_empty_block: true,
remove_trailing_brs: false, remove_trailing_brs: false,
keep_styles: false,
statusbar: false, statusbar: false,
menubar: false, menubar: false,
paste_data_images: 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\Foundation\Testing\TestCase as BaseTestCase;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Support\Env; use Illuminate\Support\Env;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Log; use Illuminate\Support\Facades\Log;
use Illuminate\Testing\Assert as PHPUnit; use Illuminate\Testing\Assert as PHPUnit;
use Monolog\Handler\TestHandler; use Monolog\Handler\TestHandler;
@ -299,6 +300,8 @@ abstract class TestCase extends BaseTestCase
/** /**
* Run a set test with the given env variable. * Run a set test with the given env variable.
* Remembers the original and resets the value after test. * 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) protected function runWithEnv(string $name, $value, callable $callback)
{ {
@ -311,7 +314,12 @@ abstract class TestCase extends BaseTestCase
$_SERVER[$name] = $value; $_SERVER[$name] = $value;
} }
$database = config('database.connections.mysql_testing.database');
$this->refreshApplication(); $this->refreshApplication();
DB::purge();
config()->set('database.connections.mysql_testing.database', $database);
$callback(); $callback();
if (is_null($originalVal)) { 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() public function test_export_body_start_and_end_template_files_can_be_used()
{ {
$bodyStartStr = 'barry-fought-against-the-panther'; $bodyStartStr = 'garry-fought-against-the-panther';
$bodyEndStr = 'barry-lost-his-fight-with-grace'; $bodyEndStr = 'garry-lost-his-fight-with-grace';
/** @var Page $page */ /** @var Page $page */
$page = Page::query()->first(); $page = Page::query()->first();
@ -342,18 +342,18 @@ class ThemeTest extends TestCase
protected function usingThemeFolder(callable $callback) protected function usingThemeFolder(callable $callback)
{ {
// Create a folder and configure a theme // 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); config()->set('view.theme', $themeFolderName);
$themeFolderPath = theme_path(''); $themeFolderPath = theme_path('');
// Create theme folder and clean it up on application tear-down
File::makeDirectory($themeFolderPath); File::makeDirectory($themeFolderPath);
$this->beforeApplicationDestroyed(fn() => File::deleteDirectory($themeFolderPath));
// Run provided callback with theme env option set // Run provided callback with theme env option set
$this->runWithEnv('APP_THEME', $themeFolderName, function () use ($callback, $themeFolderName) { $this->runWithEnv('APP_THEME', $themeFolderName, function () use ($callback, $themeFolderName) {
call_user_func($callback, $themeFolderName); call_user_func($callback, $themeFolderName);
}); });
// Cleanup the custom theme folder we created
File::deleteDirectory($themeFolderPath);
} }
} }