# Testy jednostkowe skryptów

## Scenariusze testowe <a href="#testyjednostkoweskryptow-scenariuszetestowe" id="testyjednostkoweskryptow-scenariuszetestowe"></a>

### Utworzenie testu jednostkowego <a href="#testyjednostkoweskryptow-utworzenietestujednostkowego" id="testyjednostkoweskryptow-utworzenietestujednostkowego"></a>

Dla każdego skryptu (serwisów i walidatorów) można zdefiniować scenariusze testowe. Po kliknięciu przycisku **Testy jednostkowe** w lewym pasku, otworzy się panel testów. Panel wyświetla aktualnie zdefiniowane przypadki testowe dla danego skryptu. Nowy test można dodać za pomocą znajdującego się na dole panelu przycisku **Dodaj test**.

<figure><img src="/files/wy03ktdhJq1oSR8YjTrR" alt=""><figcaption><p><em><strong>Ilustracja 1.</strong> Panel testów jednostkowych</em></p></figcaption></figure>

Każdy scenariusz ma do zdefiniowania:

* Nazwę testu,
* Opis testu,
* Aktywność - czy jest uruchamiany po kliknięciu w przycisk **Uruchom wszystkie**,
* Parametry wejścia - wartości jakie chcemy przetestować dla danego skryptu,
* Dane wniosku,
* Weryfikację wyjścia - wartości jakich oczekujemy dla zadanych w wejściu wartości:
  * Parametry wyjściowe dla serwisów,
  * Klucze komunikatów dla walidatorów.

<figure><img src="/files/Q2aqzbpSuVu00m0566If" alt=""><figcaption><p><em><strong>Ilustracja 2.</strong> Parametry wejściowe testu</em></p></figcaption></figure>

<figure><img src="/files/BQjhynipd0V49evgxc2u" alt=""><figcaption><p><em><strong>Ilustracja 3.</strong> Parametry weryfikacji wyniku testu</em></p></figcaption></figure>

### Wyniki testów jednostkowych

Wybrany test możemy uruchomić poprzez kliknięcie ikonki ![](/files/QtbtGknwSN909d1qTCxt) znajdującej się na kafelku z informacjami o scenariuszu testowym. Kliknięcie przycisku **Uruchom wszystkie** spowoduje uruchomienie wszystkich aktywnych testów.

Wynik testu może zostać oznaczony kolorem zielonym - testy zakończyły się ze spodziewanym rezultatem - lub czerwonym - błędny wynik.

Po wykonaniu testu pojawi się szuflada z logami, w której będą zawarte informacje:

* Nazwa testu, który został wykonany,
* Logi z testu,
* Wartość wyjściowa.

W przypadku uruchomienia wszystkich testów, czas działania będzie sumą wykonania wszystkich testów. W szufladzie z logami są informacje o każdym poprzednim wykonaniu, rozdzielone pustą linią. Szufladę logów można oczyścić z logów przy użyciu przycisku **Wyczyść logi**.

<figure><img src="/files/p3SpETNrokQVUHrxuOO9" alt=""><figcaption><p><em><strong>Ilustracja 4.</strong> Test z wynikiem pozytywnym</em></p></figcaption></figure>

<figure><img src="/files/OAJJLwMV3hW2Ge7Palrr" alt=""><figcaption><p><em><strong>Ilustracja 5.</strong> Test z wynikiem negatywnym</em></p></figcaption></figure>

### Dane wniosku w testach jednostkowych <a href="#testyjednostkoweskryptow-danewnioskuwtestachjednostkowych" id="testyjednostkoweskryptow-danewnioskuwtestachjednostkowych"></a>

Aplikacja przy tworzeniu testów jednostkowych umożliwia symulowanie danych znajdujących się na wniosku. W zakładce **Dane wniosku** możemy dodawać pola, które mają zwracać określoną wartość. Do podanych wartości odnosimy się za pomocą funkcji *getValue()* dostępnej na obiekcie *context.*

<figure><img src="/files/mcqAxCkEnZwyDOxQbRGY" alt=""><figcaption><p><em><strong>Ilustracja 6.</strong> Definiowanie danych wniosku przy testach jednostkowych</em></p></figcaption></figure>

<figure><img src="/files/UzmUMpYalTcBbe1bEg9D" alt=""><figcaption><p><em><strong>Ilustracja 7.</strong> Wynik działania testu z danymi wniosku</em></p></figcaption></figure>

### Błędy w trakcie testów

Jeśli skrypt zawiera błędy, test zakończy się niepowodzeniem, a błąd zalogowany zostanie w konsoli pod edytorem. W komunikacie zawarty będzie powód i miejsce wystąpienia błędu.

<figure><img src="/files/rlTaOovGEgBUF0beZT1M" alt=""><figcaption><p><em><strong>Ilustracja 8.</strong> Błąd po uruchomieniu testu</em></p></figcaption></figure>

### Sposoby weryfikacji wyjścia <a href="#testyjednostkoweskryptow-sposobyweryfikacjiwyjscia" id="testyjednostkoweskryptow-sposobyweryfikacjiwyjscia"></a>

#### Serwisy skryptowe <a href="#testyjednostkoweskryptow-sposobyweryfikacjiwyjscia" id="testyjednostkoweskryptow-sposobyweryfikacjiwyjscia"></a>

Wyjście serwisów skryptowych możemy weryfikować na kilka sposobów. Dzielą się one na porównanie liczb oraz porównanie tekstów:

**Porównanie liczb**

| Weryfikacja | Opis               |
| ----------- | ------------------ |
| >           | Większy            |
| >=          | Większy lub równy  |
| <           | Mniejszy           |
| <=          | Mniejszy lub równy |
| ==          | Liczby są równe    |
| ≠           | Liczby są nierówne |

Wybierając jeden z powyższych operatorów porównania należy mieć na uwadze, że wyjścia skryptu oraz wpisane do porównania wartości są konwertowane do liczb. W przypadku błędu konwersji którejkolwiek wartości, test zakończy się wynikiem negatywnym.

Przykładowo dla danych: wyjście z usługi: **6.0**, wartość do porównania: **6**, porównanie: **==**, wynik jest poprawny. Wartość **6.0** zwrócona ze skryptu jest równa wartości **6** wpisanej w polu oczekiwanym.

<figure><img src="/files/NMklHsHfCzQaoUZTM5fn" alt=""><figcaption><p><em><strong>Ilustracja 9.</strong> Parametry wejściowe testu</em></p></figcaption></figure>

<figure><img src="/files/eauouQZq1LYeFxL7JQKF" alt=""><figcaption><p><em><strong>Ilustracja 10.</strong> Parametry weryfikacji wyniku testu</em></p></figcaption></figure>

<figure><img src="/files/DJR31hk87BZd9E5CcxLp" alt=""><figcaption><p><em><strong>Ilustracja 11.</strong> Porównanie liczb za pomocą operatora EQ zakończone wynikiem pozytywnym</em></p></figcaption></figure>

**Porównanie tekstów**

| Weryfikacja | Opis                        |
| ----------- | --------------------------- |
| EQ          | Stringi są równe            |
| NOT\_EQ     | Stringi są nierówne         |
| \~          | Spełnia wyrażenie regularne |
| !∅          | Niepusty                    |

Dane porównywane są jako tekst. Liczby również traktowane są jako tekst.

Przykładowo dla danych: wyjście z usługi: **6.0**, wartość do porównania: **6**, porównanie: **EQ**, wynik jest niepoprawny. Wartość tekstowa **6.0** zwrócona ze skryptu, nie jest równa wartości tekstowej **6** wpisanej w polu oczekiwanym.

<figure><img src="/files/lkbihQmoufXhjVhKoza8" alt=""><figcaption><p><em><strong>Ilustracja 12.</strong> Porównanie liczb za pomocą operatora EQ zakończone wynikiem negatywnym</em></p></figcaption></figure>

#### Walidatory skryptowe <a href="#testyjednostkoweskryptow-walidatoryskryptowe" id="testyjednostkoweskryptow-walidatoryskryptowe"></a>

Wyjście walidatorów skryptowych weryfikujemy poprzez wybór kluczy komunikatów jakie zostaną zwrócone w danym przypadku testowym.

Np. walidator skryptowy zwraca dwa klucze błędów z ich parametrami:

* pl.error1
* pl.error2

Aby test zakończył się poprawnym wykonaniem asercji, na liście powinny znaleźć się oba klucze błędów.

Jeżeli dodamy nadmiarowe klucze lub zabraknie jednego z kluczy błędów, test zakończy się niepowodzeniem.

<figure><img src="/files/S0Dy7yn0cTbJJDeLhgR6" alt=""><figcaption><p><em><strong>Ilustracja 13.</strong> Test walidatorów skryptowych z wynikiem pozytywnym</em></p></figcaption></figure>

<figure><img src="/files/MEDynqza8ameUtF3Fsds" alt=""><figcaption><p><em><strong>Ilustracja 14.</strong> Test walidatorów skryptowych z wynikiem negatywnym</em></p></figcaption></figure>


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.eximee.com/budowanie-aplikacji/logika-biznesowa/scriptcode/testy-jednostkowe-skryptow.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
