Another way to create test module configuration

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, someone 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

Everything in a .ignored directory 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.