1
0
mirror of https://github.com/bia-technologies/yaxunit.git synced 2025-03-17 20:48:01 +02:00

Merge pull request #388 from edkuznetsov/develop

Дока по тестированию серверного метода по работе с формой в cookbook
This commit is contained in:
Koryakin Aleksey 2024-08-05 12:39:12 +03:00 committed by GitHub
commit e9d4a4160e
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -0,0 +1,115 @@
---
tags: [Формы, НаСервере]
sidebar_position: 2
---
# Тестирование Серверных методов по работе с Формой
Иногда нам хочется протестировать серверный метод, который предназначен для работы с формой, например, добавление элементов на форму.
Основная проблема в таком тесте, это получить форму на сервере, т.к. создать форму на сервере не получиться и с клиента ее нельзя передать.
Вот один из способов реализовать такой тест:
<details>
<summary>Код целиком</summary>
Тест:
```bsl
Процедура ДействияНадФормой(Форма = Неопределено) Экспорт
#Если Клиент Тогда
ПараметрыФормы = Новый Структура("Метод", "yaxunit_ОбщегоНазначения.ДействияНадФормой(ЭтотОбъект)");
Форма = ОткрытьФорму("ОбщаяФорма.НашаОбщаяФорма", ПараметрыФормы);
Форма.Закрыть();
#Иначе
Результат = НашТестируемыйМетод(Форма);
ЮТест.ОжидаетЧто(Результат, "Создание декорации надпись")
.Свойство("Вид").Равно(ВидДекорацииФормы.Надпись);
#КонецЕсли
КонецПроцедуры
```
Форма:
```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Выполнить(Параметры.Метод);
КонецПроцедуры
```
</details>
----
## Подготовка
1. Создаем клиент-серверный тестовый модуль
2. Регистрируем наш тестовый метод как **Клиентский тест**.
```bsl
Процедура ИсполняемыеСценарии() Экспорт
ЮТТесты.ДобавитьКлиентскийТест("ДействияНадФормой");
КонецПроцедуры
```
2. Добавляем экспортный метод который будет реализовывать тест, в качестве входного параметра укажем **Форму**.
```bsl
Процедура ДействияНадФормой(Форма = Неопределено) Экспорт
КонецПроцедуры
```
3. Создаем в расширении **Общую форму** на которой мы будем проверять наш метод, в модуль формы добавляем обработчик события **ПриСозданииНаСервере**.
## Реализация
Работа нашего нашего теста будет состоять из 3-х шагов:
```mermaid
sequenceDiagram
participant Тест
participant Форма
rect rgb(191, 223, 255)
note right of Тест: Клиент
Тест->>+Форма: Открываем форму и передаем адрес теста
end
rect rgb(191, 255, 223)
note left of Форма: Сервер
Форма-->>-Тест: ПриСозданииНаСервере.Вызываем тест с передачей формы в параметре
Тест->>Тестируемый метод: Выполнение тест с формой
Тестируемый метод -->> Тест: Результат
Тест ->>Тест: Проверка
end
rect rgb(191, 223, 255)
note right of Тест: Клиент
Тест->>+Форма: Закрытие формы
end
```
1. Сначала мы открываем форму и передаем в параметрах адрес нашего тестового метода.
2. В обработчике модуля формы **ПриСозданииНаСервере** делаем обратный вызов нашего теста с передачей этой формы в качестве параметра.
3. Вызываем тестируемый метод с нашей формой и проверяем результат.
```bsl
Процедура ДействияНадФормой(Форма = Неопределено) Экспорт
#Если Клиент Тогда // Шаг 1
// указываем путь к нашему тестовому методу в качестве параметра открытия формы
ПараметрыФормы = Новый Структура("Метод", "yaxunit_ОбщегоНазначения.ДействияНадФормой(ЭтотОбъект)");
// открываем форму
Форма = ОткрытьФорму("ОбщаяФорма.НашаОбщаяФорма", ПараметрыФормы);
Форма.Закрыть();
#Иначе // Шаг 3
// в эту ветку мы попадаем уже после вызова тестового метода из обработчика модуля формы ПриСозданииНаСервере и имеем в своем распоряжении Форму
// вызываем метод который мы хотим протестировать
Результат = НашТестируемыйМетод(Форма);
// Проверяем результат:
// Допустим наш метод добавляет на форму Декорацию надпись и возвращает созданный элемент формы.
ЮТест.ОжидаетЧто(Результат, "Создание декорации надпись")
.Свойство("Вид").Равно(ВидДекорацииФормы.Надпись);
#КонецЕсли
КонецПроцедуры
```
В модуле формы в обработчике **ПриСозданииНаСервере** прописываем обратный вызов переданного в форму теста:
```bsl
&НаСервере
Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка)
Выполнить(Параметры.Метод); // Шаг 2
КонецПроцедуры
```