# Assertion

**Assertion** узел - это узел, используемый для написания тестов. Каждый **Assertion** узел состоит из набора **Assertion**-ов - минимальных проверок различных утверждений. При запуске **Assertion** узла запускается проверка всех **Assertion**-ов. Если хотя бы одна проверка завершится с ошибкой, то выполнение всего **Assertion** узла завершается с ошибкой.&#x20;

**Assertion** узел может быть создан только как потомок [RequestStep](https://docs-ru.testmace.com/0.0.1-beta.14/node-types/requeststep) узла. Причем [RequestStep](https://docs-ru.testmace.com/0.0.1-beta.14/node-types/requeststep) узел может имет не более одного **Assertion** узла в качестве потомка.

Создать **Assertion** узел можно следующими способами: из дерева проекта в контекстном меню [RequestStep](https://docs-ru.testmace.com/0.0.1-beta.14/node-types/requeststep) узла выбрать **Add node** -> **Assertion.** Либо в секции ответа [RequestStep](https://docs-ru.testmace.com/0.0.1-beta.14/node-types/requeststep) узла во вкладке Assertion выбрать **+ CREATE NEW ASSERTION NODE**.

![Создание Assertion узла из секции ответа RequestStep узла](https://1448546621-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoAyRH5uUfa-eq257%2Fa_1.png?alt=media\&token=bda458cb-838e-44f8-87b9-4cabc2425757)

В дереве проекта **Assertion** узел выглядит следующим образом:

![](https://1448546621-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoECui6mwoRgeIDAa%2Fa_2.png?alt=media\&token=ce954185-2048-4557-b0dd-35ac6614d0a6)

Если запуск **Assertion** узла завершился успешно, то в дереве он принимает следующий вид:

![](https://1448546621-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoFN4dUZ4-U8wBQWU%2Fa_3.png?alt=media\&token=874f8bb4-745a-4f46-80af-d172edaf0a52)

В случае, если запуск **Assertion** узла завершился с ошибкой, узел выглядит так:

![](https://1448546621-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoGOvC0j_WBuSxzC_%2Fa_4.png?alt=media\&token=547ed1ef-2d22-402c-aa71-881a39ec06c8)

В дереве для данного типа узла доступны следующие пункты меню:

![](https://1448546621-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoHh5OEJ4MWR_Og86%2Fa_5.png?alt=media\&token=63b7b2f7-9e27-424b-844d-170bb011036e)

* **Remove node.** Удалить узел.
* **Run.** Запустить узел.
* **Show in explorer.** Открыть папку с узлом в файловом менеджере.

Вкладка с **Assertion** узлом выглядит следующим образом:

![Интерфейс вкладки Assertion узла](https://1448546621-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoJoMRGGK3Z5hgVkS%2Fa_6.png?alt=media\&token=821ff8a4-2406-4a59-b449-8ed75fcb380b)

На скрине отмечены следующие области:

1. Панель управления
2. Панель настроек выбранного **Assertion**-а
3. Список **Assertion**-ов

На панели управления расположены следующие кнопки

* **RUN** - запуск списка **Assertion**-ов
* **FIX ERRORS** - исправление ошибок **Assertion**-ов где это возможно. Данная кнопка активируется в случае, если есть ошибки в **Assertion**-ах. Функционал исправления ошибок описан в разделах **Исправление ошибок** каждого из **Assertion**-ов.
* **DISABLE ERRORS** - выключение **Assertion**-ов, завершившихся с ошибкой. Отключенные **Assertion**-ы не будут участвовать в дальнейших запусках. Данная кнопка активируется в случае, если есть ошибки в **Assertion**-ах
* **+ ADD ASSERTION** - добавление **Assertion** в список

Ниже панели управления находится список **Assertion**-ов. Каждый элемент в данном списке выглядит следующим образом:

![](https://1448546621-files.gitbook.io/~/files/v0/b/gitbook-legacy-files/o/assets%2F-Lh_FaVh9XfQJ0p1KqZ1%2F-LiMncFSF5eW52WiS8EV%2F-LiMoO8cHyDJOa7RFj4v%2Fa_7.png?alt=media\&token=0c7d1f73-fc66-4239-89de-b0fccf2dad07)

На скрине отмечены следующие области:

1. Подсветка статуса. Если **Assertion** не запускался, то его цвет серый, если запуск завершился с ошибкой - красный, если успешно - зеленый.
2. Иконка конкретного типа **Assertion**-а
3. Краткое текстовое представление **Assertion**-а
4. Удалить **Assertion**
5. Задизейблить **Assertion**. При этом не будет участвовать в последующих запусках
6. Запустить **Assertion**
7. Исправить **Assertion**

Заметим, что контролы 4, 5, 6 и 7 появляются при наведении на **Assertion**.

Интерфейс панели настроек выбранного **Assertion**-а зависит от выбранного **Assertion**-а. В следующих разделах мы подробно разберем каждый из **Assertion**-ов

### Файловое представление

**Assertion** узел хранится в файле \<nodename>.yml, где \<nodename> - название Assertion-а и имеет следующий формат:

```javascript
{
  "type": "object",
  "properties": {
    "type": {
      "description": "Type of Assertion node",
      "const": "Assertion",
      "type": "string"
    },
    "assertions": {
      "description": "List of assertions",
      "type": "array",
      "items": {
        "$ref": "#/definitions/AbstractAssertion"
      },
      "default": []
    },
    "children": {
      "description": "List of children names",
      "type": "array",
      "items": {
        "type": "string"
      },
      "default": []
    },
    "variables": {
      "$ref": "#/definitions/NodeVariables",
      "description": "Node variables dictionary"
    },
    "name": {
      "description": "Node name",
      "type": "string"
    }
  },
  "required": [
    "assertions",
    "children",
    "name",
    "type",
    "variables"
  ],
  "definitions": {
    "AbstractAssertion": {
      "oneOf": [
        {
          "$ref": "#/definitions/CompareAssertion"
        },
        {
          "$ref": "#/definitions/ContainsAssertion"
        },
        {
          "$ref": "#/definitions/XPathAssertion"
        },
        {
          "$ref": "#/definitions/ScriptAssertion"
        }
      ]
    },
    "CompareAssertion": {
      "type": "object",
      "properties": {
        "type": {
          "description": "Type of Compare assertion",
          "const": "compare",
          "type": "string"
        },
        "actualValue": {
          "description": "Actual value",
          "type": "string",
          "default": "${$response.body}"
        },
        "operator": {
          "$ref": "#/definitions/CompareOperator",
          "description": "Operator",
          "default": "equal"
        },
        "expectedValue": {
          "description": "Expected value",
          "type": "string"
        },
        "disabled": {
          "type": "boolean",
          "default": false
        }
      },
      "required": [
        "actualValue",
        "disabled",
        "expectedValue",
        "operator",
        "type"
      ]
    },
    "CompareOperator": {
      "enum": [
        "equal",
        "greater",
        "greater or equal",
        "less",
        "less or equal",
        "not equal"
      ],
      "type": "string"
    },
    "ContainsAssertion": {
      "type": "object",
      "properties": {
        "type": {
          "description": "Type of Contains assertion",
          "const": "contains",
          "type": "string"
        },
        "text": {
          "description": "Text to be searched",
          "type": "string",
          "default": "${$response.body}"
        },
        "value": {
          "description": "Value for search in text",
          "type": "string"
        },
        "disabled": {
          "type": "boolean",
          "default": false
        }
      },
      "required": [
        "disabled",
        "text",
        "type",
        "value"
      ]
    },
    "XPathAssertion": {
      "type": "object",
      "properties": {
        "type": {
          "description": "Type of Xpath assertion",
          "const": "xpath",
          "type": "string"
        },
        "text": {
          "description": "Text to be searched",
          "type": "string",
          "default": "${$response.body}"
        },
        "path": {
          "description": "XPath selector",
          "type": "string"
        },
        "expectedValue": {
          "description": "Expected value",
          "type": "string"
        },
        "disabled": {
          "type": "boolean",
          "default": false
        }
      },
      "required": [
        "disabled",
        "expectedValue",
        "path",
        "text",
        "type"
      ]
    },
    "ScriptAssertion": {
      "type": "object",
      "properties": {
        "type": {
          "description": "Type of Script assertion",
          "const": "script",
          "type": "string"
        },
        "script": {
          "description": "Assertion script",
          "type": "string",
          "default": "`function test(assertion, variables) {\n  // It should return true if test is passed\n  // return true;\n}`"
        },
        "disabled": {
          "type": "boolean",
          "default": false
        }
      },
      "required": [
        "disabled",
        "script",
        "type"
      ]
    },
    "NodeVariables": {
      "type": "object",
      "additionalProperties": {
        "type": "string"
      }
    }
  },
  "$schema": "http://json-schema.org/draft-07/schema#"
}
```
