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

# MUnit Spy Event Processor

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

![logo acb active](/mulesoft/current/en-us/_/img/icons/anypoint-code-builder.svg "Anypoint Code Builder")Anypoint Code
Builder

![logo studio active](/mulesoft/current/en-us/_/img/icons/studio.svg "Anypoint Studio")Anypoint Studio

The MUnit Spy event processor observes a specified event processor during a MUnit test, running
assertions or verifications before and after the processor executes without modifying the original
Mule event. Use it to validate the state of the event at specific points in a flow.

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/latest/event-processors)
