Logseq-Installer Tests
Tests für logseq-install.sh basierend auf Bats (Bash Automated Testing System).
Schnellstart
./run-tests.sh
Voraussetzungen
-
bats muss installiert sein:
# Debian/Ubuntu sudo apt-get install bats # Fedora sudo dnf install bats # macOS brew install bats-core
Verzeichnisstruktur
Logseq-Installer/
├── logseq-install.sh # Hauptskript (bleibt unverändert)
├── run-tests.sh # Test-Runner
└── test/
├── logseq-installer.bats # Bats-Testdatei (21 Testfälle)
├── mocks/ # Mock-Skripte für externe Befehle
│ ├── wget # simuliert GitHub API & Downloads
│ ├── pgrep # steuert Prozess-Erkennung
│ ├── find # steuert Versions-Erkennung & Cleanup
│ └── update-desktop-database # no-op Mock
└── fixtures/ # Testdaten & Mock-States
├── wget_state # konfiguriert wget-Mock
├── pgrep_state # konfiguriert pgrep-Mock
├── find_state # konfiguriert find-Mock
└── Logseq-linux-x64-*.AppImage # Dummy-AppImages
Test-Abdeckung
| # | Test | Beschreibung |
|---|---|---|
| 1-5 | Argument-Parsing | -h, --hilfe, unbekannte Optionen, -r |
| 6 | Deinstallation | --entfernen entfernt alle Dateien |
| 7-9 | Versionserkennung | GitHub-Version, installierte Version, nicht installiert |
| 10 | Neuinstallation | Download, Symlink, Desktop-Datei |
| 11 | Update | Alte Version wird durch neue ersetzt |
| 12 | Kein Update | Bereits aktuelle Version |
| 13 | Prozess-Check | Abbruch wenn Logseq läuft |
| 14 | Download-Fehler | Fehlerbehandlung bei fehlgeschlagenem Download |
| 15-16 | Desktop-Datei | Erstellung & Icon-Download |
| 17 | Root-Check | Prüfung der Root-Logik |
| 18 | Cleanup | Mehrere alte Versionen werden entfernt |
| 19-21 | Code-Qualität | Farbcodes, ERR-Trap, require_command |
Wie Mocks funktionieren
Die Tests setzen PATH so, dass die Mocks vor den echten Befehlen gefunden werden:
export PATH="${TEST_DIR}/mocks:${PATH}"
Jeder Mock liest seine Konfiguration aus einer State-Datei in fixtures/.
Die Tests können diese States über Hilfsfunktionen setzen:
set_wget_latest_version "${VERSION_LATEST}" # Neueste Version simulieren
set_find_installed_version "${VERSION_INSTALLED}" # Installierte Version simulieren
set_pgrep_running 1 # Prozess läuft (1) oder nicht (0)
Versions-Variablen
Versionsnummern sind nicht hartkodiert in den Tests, sondern als Variablen am Anfang der Testdatei definiert. Dummy-AppImages werden on-the-fly erstellt:
VERSION_LATEST="0.10.15" # Neueste verfügbare Version
VERSION_INSTALLED="0.10.14" # Ältere installierte Version
VERSION_OUTDATED="0.10.13" # Noch ältere Version (für Cleanup-Tests)
Um die Tests an eine neue Version anzupassen, reicht es, diese drei Variablen zu ändern. Die Dummy-AppImages und State-Dateien werden automatisch angepasst.
Neuen Test hinzufügen
In test/logseq-installer.bats:
@test "mein neuer Test" {
# Mock-States setzen
set_wget_latest_version "${VERSION_LATEST}"
set_find_installed_version ""
set_pgrep_running 0
# Skript aufrufen
run run_installer
# Assertions
[ "$status" -eq 0 ]
[[ "$output" == *"erfolgreich"* ]]
}