> For the complete documentation index, see [llms.txt](https://sevenval.gitbook.io/flat/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sevenval.gitbook.io/flat/reference/actions/assert.md).

# assert Action

Used in [FLAT tests](/flat/reference/testing.md) to assert expected results.

## Syntax

```markup
<assert>
[
  [ "$status", 200, "status is 200" ]
]
</assert>
```

The body is a JSON array of assertions. An assertion is an array itself, with up to three values:

* Expression: *as string* (see [`eval`](/flat/reference/actions/eval.md)); (required)
* Expected result: a literal value (string, number, boolean, or `null`) or an object with compare flags (see below); (optional, default: `true`)
* Message: String literal to be included in output of failed tests; (optional)

Note that the expression must be a *string*. You can use template syntax, but the resulting array of assertions must still contain a string as the expression parameter.

## Examples

```markup
<assert>
[
  [ "$foo", "bar", "…" ],
  [ "$request/headers/authorization", null, "No Authorization header is set" ],
  [ "$response", "OK" ],
  [ "json-parse($response)/user", "alice" ],
  [ "$status", 201, "got 201 - created" ],
  [ "true()", true, "for sure!" ]
]
</assert>
```

## Compare Flags

The expected value (second value) can be an object that defines one or more *compare flags*:

* `file`: read wanted text from a *golden file*
* `mode`: either `text` or `json`. `json` mode  validates JSON syntax in both expected and actual result; compares JSON in compact (un-pretty) formatting.
* `contains`: a string that must be contained in the expression result
* `pattern`: a regular expression pattern (with delimiters and optional modifiers) that the expression result must match.

```markup
<assert>
[
  [ "$response", {"file": "login.golden", "mode": "json"} ]
]
</assert>

<assert>
[
  [ "$s1", {"contains": "foo bar"} ],
  [ "$s2", {"pattern": "#^[a-z ]+$#i"} ]
]
</assert>
```

The [Testing Templates](/flat/cookbook/test-templates.md) recipe provides a full example.

## See also

* [Testing Templates](/flat/cookbook/test-templates.md) (cookbook)
* [Testing Upstream Requests](/flat/cookbook/test-backend.md) (cookbook)
* [Testing](/flat/reference/testing.md) (reference)
* [`json-parse()`](/flat/reference/functions/json-parse.md)
* [`json-stringify()`](/flat/reference/functions/json-stringify.md)
