---
schema_version: "1"
id: c624e9f1dc389b23aff368a31be415fb555b2a0436a11d50fefb23f3533596dd
title: Spy Event Processor
collection: mulesoft
version: current
locale: en-us
portal_url: https://docs.salesforce.com/mulesoft/current/en-us/munit/2.3/spy-event-processor.md
canonical_url: https://docs.mulesoft.com/munit/2.3/spy-event-processor
source_site: docs.mulesoft.com
content_type: documentation
content_hash: d1e0cedb25f97c1fa9bebe389d3107560b699f4ec92e8ba0c557e397daa3e912
description: MuleSoft Documentation Site
release: "2.3"
latest: false
---
---
product: MUnit
version: 2.3
keywords: munit, testing, unit testing
---

# Spy Event Processor

> For the full documentation index, see: https://docs.mulesoft.com/llms.txt

The **Spy Processor** enables you to spy on what happens before and after an event processor is
called.  
This enables you to validate, for example that a selected Mule Event reaches a specific event
processor containing a specific payload or variable.

Setting a spy processor tells MUnit to run a set of instructions (usually assertions or
verifications) before and/or after the execution of the spied event processor.

Assume that you have this configuration:

```xml
<flow name="testFlow">
  <http:request path="/my/api" />
</flow>
```

You can configure the spy processor to spy on any Http Request and assert that the payload is null
before reaching the component, and not null after it’s been processed:

```xml
<munit:test name="suiteTest" >

  <munit:behavior >

    <munit-tools:spy processor="http:request">
      <munit-tools:before-call >
        <munit-tools:assert-that expression="#[payload]" is="#[MunitTools::nullValue()]"/>
      </munit-tools:before-call>
      <munit-tools:after-call >
        <munit-tools:assert-that expression="#[payload]" is="#[MunitTools::notNullValue()]"/>
      </munit-tools:after-call>
    </munit-tools:spy>

  </munit:behavior>

</munit:test>
```

Or even to spy on any Http Request, whose path is '/my/api'.

```xml
<munit:test name="suiteTest" >

  <munit:enable-flow-sources >
    <munit:enable-flow-source value="testFlow" />
  </munit:enable-flow-sources>

  <munit:behavior >

    <munit-tools:spy processor="http:request">
      <munit-tools:with-attributes >
        <munit-tools:with-attribute attributeName="path" whereValue="#['/my/api']" />
      </munit-tools:with-attributes>

      <munit-tools:before-call >
        <munit-tools:assert-that expression="#[payload]" is="#[MunitTools::nullValue()]"/>
      </munit-tools:before-call>

      <munit-tools:after-call >
        <munit-tools:assert-that expression="#[payload]" is="#[MunitTools::notNullValue()]"/>
      </munit-tools:after-call>

    </munit-tools:spy>

  </munit:behavior>

</munit:test>
```

As shown above, this processor enables you to define actions for before and after calling the spied
processor. However, keep in mind that the spy processor does not modify the original Mule Event.  
If you set variables, attributes, or modify the payload inside a Spy, these changes won’t persist
outside the processor.  
Overall, you should use the Spy processor to verify or assert.

## See Also

- [MUnit Event Processors](https://docs.mulesoft.com/munit/2.3/event-processors)
