---
title: Another way to create test module configuration
date: 2024-02-17
permalink: daily/2024/02/17/another-way-to-create-test-module-configuration
snippet: |
  There's another way to export configuration for Drupal test modules using Drush...
tags:
  - software-development
  - automated-testing
  - test-driven-development
  - drupal
  - php
---

{% block content %}
In one of the lessons in my [free automated testing in Drupal email course][atdc], 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:

```language-shell
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:

```language-shell
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][yesterday] and it worked well.

[atdc]: {{site.url}}/atdc
[yesterday]: {{site.url}}/daily/2024/02/16/keep-logic-within-tests-for-as-long-as-you-can
{% endblock %}

{% block cta %}
P.S. Do you need immediate access to an expert Drupal Developer? [With my Drupal development subscription][subscription], make unlimited requests for a fixed monthly price in less time than posting to a job board!

[subscription]: {{site.url}}/subscription
{% endblock %}