uuid: - value: 960814d3-b3bd-4a5a-a541-906c1e121902 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:20+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: 'Another way to create test module configuration' created: - value: '2024-02-17T00:00:00+00:00' changed: - value: '2025-05-11T09:00:20+00:00' promote: - value: false sticky: - value: false default_langcode: - value: true revision_translation_affected: - value: true path: - alias: /daily/2024/02/17/another-way-to-create-test-module-configuration langcode: en body: - value: |

In one of the lessons in my free automated testing in Drupal email course, I explain how I create configuration that I need within my tests, such as adding a custom field:

But how do you know what to name the configuration files and what content to put in them?

Rather than trying to write them by hand, I create the configuration I need, such as fields, within a Drupal site and then export and edit the files I need.

As well as creating the fields in the Drupal UI, I was also using it to export the configuration files I needed:

Once Drupal is installed and the configuration has been created, you can go to - /admin/config/development/configuration/single/export and select the configuration type and name.

The filename is shown at the bottom of the page, and you can copy the content into files within your module.

There's another way

After reading that lesson, somene replied and reminded me that there's a --destination option you can use with the drush config:export command.

Instead of exporting to the standard configuration directory, I can do it to a temporary directory:

run drush cex --destination /app/.ignored/config
      

Everyhing in a .ignored direcotry is automatically ignored by Git, and to get the files I need, I can use Linux's find command to find any files that contain the field name and copy them into my test module directory:

find .ignored/config \
        -type f \
        -name \*drupal_project\* \
        -exec cp -r {} web/modules/custom/foo/modules/foo_test/config/install \;
      

I still need to edit the files to remove the uuid and _core values, but this approach means less clicking in the Drupal UI which makes me more productive.

I used this approach when writing my SaaS code yesterday and it worked well.

format: full_html processed: |

In one of the lessons in my free automated testing in Drupal email course, I explain how I create configuration that I need within my tests, such as adding a custom field:

But how do you know what to name the configuration files and what content to put in them?

Rather than trying to write them by hand, I create the configuration I need, such as fields, within a Drupal site and then export and edit the files I need.

As well as creating the fields in the Drupal UI, I was also using it to export the configuration files I needed:

Once Drupal is installed and the configuration has been created, you can go to - /admin/config/development/configuration/single/export and select the configuration type and name.

The filename is shown at the bottom of the page, and you can copy the content into files within your module.

There's another way

After reading that lesson, somene replied and reminded me that there's a --destination option you can use with the drush config:export command.

Instead of exporting to the standard configuration directory, I can do it to a temporary directory:

run drush cex --destination /app/.ignored/config
      

Everyhing in a .ignored direcotry is automatically ignored by Git, and to get the files I need, I can use Linux's find command to find any files that contain the field name and copy them into my test module directory:

find .ignored/config \
        -type f \
        -name \*drupal_project\* \
        -exec cp -r {} web/modules/custom/foo/modules/foo_test/config/install \;
      

I still need to edit the files to remove the uuid and _core values, but this approach means less clicking in the Drupal UI which makes me more productive.

I used this approach when writing my SaaS code yesterday and it worked well.

summary: null field_daily_email_cta: { }