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

- Oliver

Was this interesting?

Sign up here and get more like this delivered straight to your inbox every day.

About me

Picture of Oliver

I'm an Acquia-certified Drupal Triple Expert with 17 years of experience, an open-source software maintainer and Drupal core contributor, public speaker, live streamer, and host of the Beyond Blocks podcast.