uuid: - value: 0a3bf034-7203-45c2-aae5-74f9211929fa langcode: - value: en type: - target_id: daily_email target_type: node_type target_uuid: 8bde1f2f-eef9-4f2d-ae9c-96921f8193d7 revision_timestamp: - value: '2025-05-11T09:00:32+00:00' revision_uid: - target_type: user target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849 revision_log: { } status: - value: true uid: - target_type: user target_uuid: b8966985-d4b2-42a7-a319-2e94ccfbb849 title: - value: | What's the simplest test to begin with? created: - value: '2023-09-07T00:00:00+00:00' changed: - value: '2025-05-11T09:00:32+00:00' promote: - value: false sticky: - value: false default_langcode: - value: true revision_translation_affected: - value: true path: - alias: /daily/2023/09/07/what-s-the-simplest-test-to-begin-with langcode: en body: - value: |
When giving talks and workshops or coaching on automated testing and test-driven development, some people may not have written tests before and aren't familiar with the structure or know where to begin.
In the workshops I ran for DrupalCamp London and DrupalCamp NYC, I wanted to cover this first before writing any implementation code.
Where do you put a test class, and what does it contain?
How do you run the tests, and how can you make it pass or fail?
To start, we wrote a test for existing functionality within Drupal core - anonymous users can visit the front page.
This is the whole test:
<?php
namespace Drupal\Tests\my_module\Functional;
use Drupal\Tests\BrowserTestBase;
use Symfony\Component\HttpFoundation\Response;
class MyModuleTest extends BrowserTestBase {
protected $defaultTheme = 'stark';
/** @test */
public function the_front_page_loads_for_anonymous_users() {
$this->drupalGet('<front>');
$this->assertResponse(Response::HTTP_OK);
}
}
This is a test someone can write, run and see the test pass.
They can then experiment by changing the values to make the test fail in different ways.
Then, we tested anonymous users cannot access the administration pages, which is also already the case in Drupal core, and then authenticated users with the correct permissions could access them.
People were getting the idea by now, and we moved on to writing and testing some of our own code.
format: full_html processed: |When giving talks and workshops or coaching on automated testing and test-driven development, some people may not have written tests before and aren't familiar with the structure or know where to begin.
In the workshops I ran for DrupalCamp London and DrupalCamp NYC, I wanted to cover this first before writing any implementation code.
Where do you put a test class, and what does it contain?
How do you run the tests, and how can you make it pass or fail?
To start, we wrote a test for existing functionality within Drupal core - anonymous users can visit the front page.
This is the whole test:
<?php
namespace Drupal\Tests\my_module\Functional;
use Drupal\Tests\BrowserTestBase;
use Symfony\Component\HttpFoundation\Response;
class MyModuleTest extends BrowserTestBase {
protected $defaultTheme = 'stark';
/** @test */
public function the_front_page_loads_for_anonymous_users() {
$this->drupalGet('<front>');
$this->assertResponse(Response::HTTP_OK);
}
}
This is a test someone can write, run and see the test pass.
They can then experiment by changing the values to make the test fail in different ways.
Then, we tested anonymous users cannot access the administration pages, which is also already the case in Drupal core, and then authenticated users with the correct permissions could access them.
People were getting the idea by now, and we moved on to writing and testing some of our own code.
summary: null field_daily_email_cta: { }