Compare

Интерфейс Compare assertion-а выглядит следующим образом:

Compare assertion служит для сравнения 2 значений. В поле Expected value type указывается какого типа значения будут сравниваться - строки, числа, JSON-объекты.

От выбранного типа значения зависит доступный набор операций сравнения, которые можно выбрать в поле Operator. Для типов string и number доступны следующие операторы:

  • equal - проверка на равенство значений

  • not equal - проверка на неравенство значений

  • greater - проверка на то, что текущее значение больше ожидаемого

  • greater or equal - проверка на то, что текущее значение больше ожидаемого или равно ему

  • less - проверка на то, что текущее значение меньше ожидаемого

  • less or equal - проверка на то, что текущее значение меньше ожидаемого или равно ему

Важно отметить, что при сравнении значений, которые можно представить и как строки и как числа, результат некоторых операторов может показаться неожиданным. Например, возьмем утверждение число 100 больше числа 2. Такой assertion завершится успешно. Однако, если сравнивать те же значения но как строки ("100" is greater than "2"), то assertion завершится с ошибкой. Это обясняется тем, что строки сравниваются посимвольно в алфавитном порядке.

Для типа object доступны следующие операторы:

  • equal - проверка на точное соответсвие структуры объектов

  • not equal - проверка на то, что структуры объектов различаются

  • is subset of - проверка на то, что структура актуального значения содержится в структуре ожидаемого значения.

  • is superset of - проверка на то, что структура актуального значения содержит в себе структуру ожидаемого значения.

Поясняющие примеры для опрераторов "is subset of" и "is superset of"

Пусть актуальное значение равно:

[
{
"name": "Mike"
}
]

А ожидаемое значение:

[
{
"id": 0,
"name": "John",
"name": 24
},
{
"id": 1,
"name": "Mike",
"age": 28
}
]

В данном примере актуальное значение является подмножеством ожидаемого значения. Автоматически верно и обратное - ожидаемое значение явяляется надмножеством актуального.

Структуры сравниваются рекурсивно, проверяя на соответствие каждый уровень вложенности. В примере выше сначала проверяется, что на верхнем уровне оба значения представляют из себя массив, затем каждый элемент массива из актуального значения сравнивается с каждым элементом из ожидаемого, пока не встретится первое совпадение. Объекты сравниваются на соответствие строковых ключей и их значений.

Отдельно стоит отметить, что при сравнении элементов массивов происходит поиск подпоследовательности, а не поэлементный поиск. Например, массив [2,4] является подмножеством массива [1,2,3,4], а массив [4, 2] - уже нет.

Исправление ошибок

Алгоритм исправления ошибок зависит от каждого конкретного компаратора.

  • equal - ожидаемому значению присваивается текущее значение

  • not equal - компаратор меняется на equal

  • greater - компаратор меняется на greater or equal и ожидаемому значению присваивается текущее значение

  • greater or equal - ожидаемому значению присваивается текущее значение

  • less - компаратор меняется на less or equal и ожидаемому значению присваивается текущее значение

  • less or equal - ожидаемому значению присваивается текущее значение

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

В файле Assertion имеет тип compare , описание самого типа можно найти в документации к файловому представлению Assertion в определении #/definitions/CompareAssertion .