Files
esphome/tests/components
Claude c1838fae62 [api] Add support for ESPHome action responses
This adds the ability for ESPHome-defined actions (services) to send
responses back to Home Assistant. This is the complement to the existing
feature that allows ESPHome to receive responses from HA actions.

New features:
- ExecuteServiceResponse protobuf message (ID 131) for sending responses
- call_id field in ExecuteServiceRequest for tracking service calls
- api.respond action for sending responses from YAML automations
- Support for JSON response data via data: lambda

Example usage:
```yaml
api:
  actions:
    - action: get_sensor_value
      variables:
        sensor_name: string
      then:
        - api.respond:
            data: |-
              root["value"] = id(my_sensor).state;
              root["unit"] = "°C";
```

Note: This requires corresponding changes in aioesphomeapi and
home-assistant/core to handle the new messages.
2025-11-20 22:09:19 +00:00
..
2025-09-26 08:53:21 +12:00
2025-11-03 18:29:30 -06:00

How to write C++ ESPHome unit tests

  1. Locate the folder with your component or create a new one with the same name as the component.
  2. Write the tests. You can add as many .cpp and .h files as you need to organize your tests.

IMPORTANT: wrap all your testing code in a unique namespace to avoid linker collisions when compiling testing binaries that combine many components. By convention, this unique namespace is esphome::component::testing (where "component" is the component under test), for example: esphome::uart::testing.

Running component unit tests

(from the repository root)

./script/cpp_unit_test.py component1 component2 ...

The above will compile and run the provided components and their tests.

To run all tests, you can invoke cpp_unit_test.py with the special --all flag:

./script/cpp_unit_test.py --all

To run a specific test suite, you can provide a Google Test filter:

GTEST_FILTER='UART*' ./script/cpp_unit_test.py uart modbus

The process will return 0 for success or nonzero for failure. In case of failure, the errors will be printed out to the console.