Kiedy potrzebujesz stestować komponent, w którym zachodzą interakcje z użytkownikiem, warto napisać test, który zasymuluje cały proces, tak jakby robił to użytkownik. Możesz to zrobić za pomocą biblioteki user-event
Za pomocą getByLabelText i getByText pobieramy referencje do pola tekstowego i miejsca, gdzie tekst ma się wyświetlić po wpisaniu danych.
Za pomocą type z biblioteki user-event wprowadzany jest tekst do pola tekstowego. Pierwszy argument to referencja do kontrolki, dla której wpisujemy dane. Drugi argument to tekst, który chcemy przekazać.
Jak już wyżej wspomniałem: nie można zmieniać wartości parametrów w ciele funkcji. Jeśli spróbujesz to zrobić, zostanie zgłoszony błąd.
Jeśli jednak koniecznie potrzebujesz zmienić wartość parametru, oznacz go jako: inout. Dodatkowo w momencie wywołania funkcji przed nazwą argumentu należy użyć: &.
Możesz określić typ danych, jaki zwraca funkcja za pomocą: return. Dzięki -> określasz typ zwracanych danych.
Zwracania jednej wartości
funccalculate(a: Int, b: Int) -> Int {
return a + b
}
let result: Int= calculate(a: 5, b: 7)
print(result) // 12
Zwracanie wielu wartości
Swift pozwala na zwrócenie wielu wartości. Taka funkcja zwróci krotkę (ang.: Tuple).
funcprepare(_name: String) -> (greet: String, goodbye: String) {
let greet: String="Hello \(name)!"let goodbye: String="Bye \(name)!"return (greet, goodbye)
}
let result = prepare("Marcin")
print(result.greet) // Hello Marcin!print(result.goodbye) // Bye Marcin!
Zwracanie funkcji
Możesz zwrócić funkcję jako wynik działania innej funkcji.
funcsum(_a: Int, _b: Int) -> Int {
return a + b
}
funcsubstract(_a: Int, _b: Int) -> Int {
return a - b
}
funcdefaultOperate(_a: Int, _b: Int) -> Int {
return0
}
funcprepare(_op: String) -> (Int, Int) -> Int {
if op =="+" {
return sum
} elseif op =="-" {
return substract
}
return defaultOperate
}
let sumOperate = prepare("+")
print(sumOperate(0, 1)) // 1let substractOperate = prepare("-")
print(substractOperate(0, 1)) // -1
Zagnieżdżone funkcje
Swift pozwala także na zagnieżdżone funkcje:
funccalculate(_a: Int, _b: Int, _op: String) -> Int {
funcsum(_a: Int, _b: Int) -> Int {
return a + b
}
funcsubstract(_a: Int, _b: Int) -> Int {
return a - b
}
if op =="+" {
return sum(a, b)
} elseif op =="-" {
return substract(a, b)
}
return0
}
print(calculate(0, 1, "+")) // 1print(calculate(0, 1, "-")) // -1