Перейти к основному содержимому

<context>

Описание

Переопределяет значения переменных $client и $session в тест-кейсах.

Атрибуты

var определяет переменную, для которой будет установлено значение. Возможные значения атрибута: client и session.

Тело

JSON-объект.

Переопределение значений полей в рамках сессии

  • Если для полей еще не устанавливались значения, будут использоваться те, которые вы задаете.
  • Если для каких-то полей вы уже устанавливали значения, то они будут перезаписаны.

При переопределении значений также учитываются значения, заданные в сценарии.

Например, если в сценарии указано:

state: Password
a: Введите ваш пароль, чтобы функции бота стали доступны.

state: GetPassword
q: qwerty
script:
$client.account = $client.account || {};
$client.account.password = "qwerty";
a: Такой пароль небезопасный.

А в тест-кейсе вы указываете:

<context var="client">
{
"name": "Ваня",
"account": {"username": "vanya2000"}
}
</context>

А затем:

<context var="client">
{
"name": "Иван"
}
</context>

То в итоге значения полей для объекта $client будут такими:

{
"name": "Иван",
"account": {"username": "vanya2000", "password": "qwerty"}
}

Пример

Рассмотрим сценарий:

theme: /

state: Start
q!: $regex</start>
a: Давай поиграем. Я напишу цитату, а ты попробуешь отгадать автора. Согласен?

state: Quote
q!: (да | хорош* | ~согласный | ок)
script:
# Выполняется HTTP-запрос к API.
var response = $http.get("http://api.forismatic.com/api/1.0/?method=getQuote&format=json&lang=ru");
# Данные из ответа сохраняются в объект $session.
$session.quoteText = response.data.quoteText;
$session.quoteAuthor = response.data.quoteAuthor;
# Происходит проверка на наличие информации об авторе в ответе.
if: $session.quoteAuthor !== ""
go!: /Quote/Who
else:
a: Я нашел хорошую цитату, но не знаю автора. А цитата вот: {{$session.quoteText}}
a: Давай еще раз попробуем?

state: Who
a: Кто автор цитаты: {{$session.quoteText}}?

state: GetAuthor
q!: *
# Происходит проверка, совпадает ли ответ пользователя с автором цитаты из $session.quoteAuthor.
if: $session.quoteAuthor === $parseTree.text
a: Ого! Ты прав!
else:
a: Попробуй еще раз.

Тест-кейс для проверки ответа пользователя может выглядеть так:

<test>
<test-case id="AnswerCheck">
<!-- Проверка, совпадает ли ответ пользователя с автором цитаты -->
<context var="session">
{
"quoteAuthor": "Галилео Галилей"
}
</context>
<q>Коперник</q>
<a>Попробуй еще раз.</a>
<q>Галилео Галилей</q>
<a>Ого! Ты прав!</a>
</test-case>
</test>

Более подробный пример использования тега <context> в разделе Тестирование сценария с переменными.