From 430fe5eac72e31501daca3fa280070fa523246d4 Mon Sep 17 00:00:00 2001 From: Oliver Davies Date: Thu, 30 Nov 2023 00:36:44 +0000 Subject: [PATCH] Add daily email for 2023-11-27 Finding the best test base --- src/content/daily-email/2023-11-27.md | 99 +++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 src/content/daily-email/2023-11-27.md diff --git a/src/content/daily-email/2023-11-27.md b/src/content/daily-email/2023-11-27.md new file mode 100644 index 000000000..3585e2889 --- /dev/null +++ b/src/content/daily-email/2023-11-27.md @@ -0,0 +1,99 @@ +--- +title: > + Finding the best test base +pubDate: 2023-11-27 +permalink: > + archive/2023/11/27/finding-the-best-test-base +tags: + - software-development + - automated-testing + - test-driven-development + - php + - drupal +--- + +As well as different base classes for types of tests - i.e. functional, kernel and unit - there are other test base classes within those that can be used to simplify things. + +For example, if we have this test: + +```php +installEntitySchema(entity_type_id: 'node'); + $this->installEntitySchema(entity_type_id: 'user'); + } + + public function testExample(): void { + $user = $this->createUser(); + + $article = $this->createNode([ + 'title' => 'Test article', + 'uid' => $user, + ]); + + self::assertSame('1', $article->getOwnerId()); + } + +} +``` + +Both creation traits must be imported, the `node` and `user` modules must be enabled, and the entity tables must be installed. + +When writing a lot of tests, this can result in duplication and more complex tests that take longer to write. + +This can be simplified using `EntityKernelTestBase` instead of `KernelTestBase`: + +```php +createUser(); + + $article = $this->createNode([ + 'title' => 'Test article', + 'uid' => $user, + ]); + + self::assertSame('1', $article->getOwnerId()); + } + +} +``` + +The class is simpler, fewer modules must be specified, and the entity schemas are automatically installed. + +As well as the core modules, some contrib modules also provide their own base test cases. + +If you're using the Webform module, you may want to use `WebformAccessTestBase` instead of the standard `UnitTestCase`. + +It's definitely worth spending some time looking at what base test cases are available and which are the best ones to use for your own tests.