Zum Hauptinhalt springen

Einheitstests JavaScript: Umfassendes Leitfaden 2026

Meister Einheitstests JavaScript mit unserem Leitfaden 2026. Umfasst Jest, Mocha, Einrichtung, Mocking, CI und Tipps für Capacitor & Electron-Apps.

Martin Donadieu

Martin Donadieu

Inhaltsmarketer

Einheitstests JavaScript: Umfassendes Leitfaden 2026

Sie befinden sich wahrscheinlich in einer von zwei Situationen. Entweder Ihr JavaScript-Projekt hat fast keine Tests und jede Refaktorisierung fühlt sich riskant an, oder Sie haben bereits Tests und die Hälfte davon ist langsam, brüchig und schwer zu vertrauen.

Das wird sich verschlimmern in Capacitor und Elektron Apps. Ein einfacher Feature kann gemeinsame Geschäftslogik, Browser-APIs, native Plugins, lokale Dateien, IPC und Remote-Dienste in derselben Fluss berühren. Wenn Sie diese Teile falsch testen, wird Ihr Suite zu einem Labyrinth an fiktiven Abhängigkeiten. Wenn Sie sie richtig testen, erhalten Sie schnelles Feedback auf die Logik, die kaputt geht.

Gute Einheitstests funktionieren JavaScript nicht mit cleverer Matcher-Syntax. Es beginnt mit einer disziplinierten Grenze: Testen Sie die reine Logik direkt, isolieren Sie die Nebeneffekte und vermeiden Sie es, Tests zu schreiben, die zusammenbrechen, wenn Sie einen internen Funktion umbenennen.

Inhaltsverzeichnis

Wählen Sie Ihre JavaScript-Testframework

Ein professionelles JavaScript-Projekt benötigt einen echten Testrunner. Ad-hoc-Skripte und manuelle Konsolenprüfungen reichen nicht aus, wenn mehrere Ingenieure an demselben Codebase arbeiten. Sie benötigen Testentdeckung, Assertions, asynche Handhabung, Mocks und eine Möglichkeit, alles konsistent in der lokalen Entwicklung und CI auszuführen.

Die derzeitige Leitlinie konvergiert immer wieder auf eine kleine Anzahl von Mainstream-Optionen. Jest, Mocha und Jasmine werden wiederholt als primäre Frameworks hervorgehoben, mit Jest oftmals für die integrierte Teststruktur, Anforderungen, Mocking und asynche Unterstützung in einem Paket hervorgehoben, wie in diesem Pluralsight-Lab für JavaScript-Tests.

Ein Vergleichsdiagramm, das beliebte JavaScript-Testframeworks einschließlich Jest, Mocha, Cypress und Playwright zeigt.

Warum ein Framework nicht optional ist

Das erste Missverständnis, das Teams haben, ist, dass Einheitstests eine Nebentätigkeit sind. Das führt normalerweise zu inkonsistenten Dateinamen, eigenen Anforderungen, die niemand mehr kennt, und Helfern, die nur einer Person bekannt sind.

Ein Framework gibt dir eine gemeinsame Sprache:

  • Teststruktur mit describe und test oder it
  • Anforderungen mit lesbaren Vergleichern
  • Hooks für Setup und Takedown Für die Einrichtung und den Abbau
  • Asynchrone Unterstützung Für Versprechen und Timer
  • Werkzeuge zum Mocken Für externe Abhängigkeiten

Wenn Ihr Team auch einen umfassenderen Überblick über die Testautomatisierung benötigt, als nur auf der Ebene der Einheiten arbeiten, hat Capgo eine nützliche Übersicht über Automatisierte Tests in der Anwendungslieferung.

Jest vs Mocha im Überblick

Jest und Mocha vertreten zwei verschiedene Philosophien.

Jest ist die alles-in-einem-Option. Sie liefert mit der meisten, was Teams am ersten Tag benötigen.
Mocha ist modularer. Es gibt Ihnen einen Runner und erwartet, dass Sie den Rest der Stacks zusammenbauen.

Funktion Jest Mocha
Setup-Komplexität Geringer für die meisten Teams Höher, weil Sie normalerweise Assertion- und Mocking-Bibliotheken hinzufügen
Ansprüche Eingebaut Normalerweise mit einer anderen Bibliothek kombiniert
Mocking Built in Normalerweise wird sie mit einer anderen Bibliothek kombiniert
Async-Testen Built in und direkt Unterstützt, aber hängt mehr von der Umgebung ab
Abdeckungsworkflow Häufig in die gleiche Werkzeugkette integriert Oft mehr zusammengefügt
Beste Wahl Neue Projekte, Teams, die konsistente Ergebnisse wollen Legacy-Stacks, Teams, die modularen Kontrolle wollen

Praktische Regel: Wenn Ihr Team fragen muss, welche Anforderungsbibliothek und Mocking-Bibliothek mit dem Runner kombiniert werden soll, wollen Sie wahrscheinlich Jest.

Was ich für die meisten Teams empfehle

Für die meisten modernen Projekte würde ich Jest es sei denn, das Codebase hat bereits starke Gründe, sich an Mocha zu halten. Diese Empfehlung wird stärker, wenn die Anwendung Capacitor oder Electron, weil diese Projekte bereits genug bewegliche Teile haben. Die Reduzierung des Testwerkzeugspralls zahlt sich schnell aus.

Mocha macht noch immer Sinn in älteren Node.js-Diensten oder langlebigen Codebases, wo das Ecosystem bereits abgeschlossen ist. Aber für einen mittelständischen Ingenieur, der von vorneherein eine robuste Suite einrichtet, entfernt Jest in der Regel mehr Hindernisse als es schafft.

Ein wichtiger Umfangsvermerk. Cypress und Playwright sind ausgezeichnete Werkzeuge, aber sie lösen ein anderes Problem. Sie sind besser für Browser-Ebene- und End-to-End-Überprüfungen, nicht für die schnelle innere Schleife, wo Einheitstests JavaScript-Code leben sollten.

Projektsetup und Ihre erste Einheitstest

Ein sauberes Testsetup sollte langweilig sein. Wenn das Hinzufügen des ersten Tests kompliziert ist, wird die Suite wahrscheinlich nicht gesund bleiben.

Ein Mann mit Brille, der an einem Programmierprojekt auf einem Laptop an einem Holztisch arbeitet.

Ein einfacher Jest-Setup

Mit einem JavaScript-Projekt beginnen, das bereits ein package.json. Dann füge Jest als Entwicklungspaket hinzu und verbinde eine Testskript.

{
  "scripts": {
    "test": "jest"
  }
}

Das reicht für viele Projekte. Du kannst später mehr Konfiguration hinzufügen, wenn dein Modulsystem, die Transpilation oder die Struktur deiner Monorepo es erfordert.

Wenn du ein Capacitor-Anwendungsprojekt lokal baust und dein Entwicklungsumfeld vor dem Hinzufügen von Tests um die gemeinsame Logik in Ordnung hast, ist Capgo's Anleitung zum Aufbau eines Capacitor-Lokalumfelds eine praktische Begleiterin.

Schreibe den Test vor dem code

Das Test-First-Muster ist nicht nur eine persönliche Vorliebe. Die U.S. Consumer Financial Protection Bureau's JavaScript-Richtlinie empfiehlt den Test zuerst zu schreibenOrganisierung von Tests mit describe und it, und die Ausrichtung von Kontrollen um expect(...) Ansprüche in seiner JavaScript-Einheitstestleitlinie.

Das ist wichtig, weil test-first die Art und Weise ändert, wie Sie code. Funktionen gestalten. Funktionen tendieren dazu, kleiner zu werden, Abhängigkeiten werden sichtbarer, und Nebeneffekte stoppen, in die Logik einzudringen, die rein bleiben sollte.

Ein Minimalbeispiel:

// math.js
function addTax(amount, rate) {
  return amount + amount * rate;
}

module.exports = { addTax };
// math.test.js
const { addTax } = require('./math');

describe('addTax', () => {
  it('returns the amount with the tax applied', () => {
    expect(addTax(100, 0.2)).toBe(120);
  });
});

Verwenden Sie Arrange Act Assert immer

Der Arrange, Act, Assert Muster hält Tests lesbar, selbst wenn sie komplexer werden.

  1. Arrange Eingabe und erforderliche Einstellungen.
  2. Aktion durch Aufruf der Funktion
  3. Behaupten auf das Ergebnis

Angewendet auf eine Validierungshilfe:

function isSupportedPlatform(platform) {
  return ['ios', 'android', 'web', 'desktop'].includes(platform);
}

describe('isSupportedPlatform', () => {
  it('returns true for ios', () => {
    // Arrange
    const platform = 'ios';

    // Act
    const result = isSupportedPlatform(platform);

    // Assert
    expect(result).toBe(true);
  });
});

Kleine Tests halten sich gut. Ein Test sollte normalerweise eine Frage beantworten, nicht eine gesamte Ablaufbeschreibung erzählen.

For Capacitor and Electron projects, that discipline matters more because your pure logic often sits next to native or desktop integration code. Keep the business rule testable without the platform runtime, and your first test won’t be your last useful one.

Meisterung von Mocks und asynchronen Code

Die meisten Fehler in Anwendungen code kommen nicht von der Addition zweier Zahlen. Sie kommen von code die sich außerhalb selbst befindet: Netzwerk-Anfragen, Dateien, Plugin-APIs, Timer, IPC-Kanäle, Speicherschichten.

Das ist der Punkt, an dem Mocking hilft. Es gibt Ihnen die Kontrolle über die Grenze, damit der Test sich auf die Entscheidungsfindung Ihres code konzentrieren kann.

Ein Whiteboard-Diagramm, das eine Microservices-Architektur mit APIs, Datenbanken, externen Diensten und eventgetriebenen Datenflüssen illustriert.

Fiktive Grenzen, nicht alles

Leitfaden für wartbare Tests betont eine-Verhaltens-Abdeckung und eine starke Behauptung pro Test, und es warnt auch davor, Mocks übermäßig zu verwenden, da Tests dadurch brüchig und eng an Implementierungsdetails gekoppelt werden, wie in diesem Artikel von TestRail zu wartbaren Einheitstests.

Diese Warnung zählt in JavaScript sehr viel. Teams beginnen oft damit, jeden importierten Modul zu mocken und enden damit, ob Funktionen andere Funktionen in der richtigen Reihenfolge aufrufen, anstatt das echte Verhalten zu testen.

Falsches Ziel für einen Mock-Test:

  • ob Hilfsfunktion A Helper B aufgerufen hat
  • ob Dienst C Serializer D aufgerufen hat
  • ob eine interne private Funktion zweimal aufgerufen wurde

Bessere Zielgruppe:

  • Was die Funktion zurückgab
  • Ob es eine fehlgeschlagene Abhängigkeit richtig bearbeitet hat
  • Ob es die Daten in die erwartete Form umgewandelt hat

Ein besseres Muster für Capacitor und Electron code

In mobilen und Desktop-Anwendungen bevorzuge ich eine Wrapper-Schicht um native oder Plattform-APIs herum. Dann mockt man die Wrapper-Schicht, nicht die Plattform selbst.

Beispielstruktur:

// cameraGateway.js
async function getPhoto(cameraPlugin) {
  return cameraPlugin.getPhoto();
}

module.exports = { getPhoto };
// profilePhotoService.js
async function loadProfilePhoto(cameraGateway) {
  const photo = await cameraGateway.getPhoto();
  return { path: photo.path, ready: true };
}

module.exports = { loadProfilePhoto };
// profilePhotoService.test.js
const { loadProfilePhoto } = require('./profilePhotoService');

test('returns mapped photo data', async () => {
  const fakeCameraGateway = {
    getPhoto: jest.fn().mockResolvedValue({ path: '/tmp/pic.jpg' })
  };

  const result = await loadProfilePhoto(fakeCameraGateway);

  expect(result).toEqual({ path: '/tmp/pic.jpg', ready: true });
});

Das Muster funktioniert auch für Electron. Wrap ipcRendererDateizugriff oder Shell-Integrationen hinter einer dünnen Adapter-Schicht.

For teams testing release logic and update paths in Capacitor apps, Capgo has a relevant guide on Für Teams, die die Release-Logik und Update-Pfade in Capacitor-Anwendungen testen, hat __CAPGO_KEEP_1__ eine relevante Anleitung zu.

dem Testen von __CAPGO_KEEP_0__-OTA-Updates mit Mock-Szenarien

Asynke Flüsse ohne Flakkezität testen

Verwende async/await in Tests, wenn der code unter Test zurückgibt. Es ist klarer als die callback-reiche Muster und einfacher zu debuggen.

async function fetchProfile(api) {
  const response = await api.getUser();
  return response.name;
}

test('returns the user name from the API response', async () => {
  const api = {
    getUser: jest.fn().mockResolvedValue({ name: 'Ava' })
  };

  const result = await fetchProfile(api);

  expect(result).toBe('Ava');
});

Teste auch den Fehlerpfad:

test('throws when the API request fails', async () => {
  const api = {
    getUser: jest.fn().mockRejectedValue(new Error('network failed'))
  };

  await expect(fetchProfile(api)).rejects.toThrow('network failed');
});

Teste sowohl den glücklichen Pfad als auch den unangenehmen Pfad. In der Produktion ist der unangenehme Pfad meist der, den die Benutzer merken.

Fortgeschrittene Strategien für Robuste Tests

Ein Test-Suite wird nützlich, wenn sie nach dem code-Wechsel noch nützlich bleibt. Das ist schwieriger als die Schreibaufgabe von einer Menge von Tests, die laufen.

Ein Diagramm, das Strategien für die Erstellung robuster Software durch umfassende Testabdeckung und wartbare Test-Suiten illustriert.

Verwende den Test-Split als Budget

Ein praktischer Leitfaden empfiehlt eine 70/20/10 Aufteilung über Einheitstests, Integrations- und End-to-End-Testsmit Einheitstests, die die schnellste Rückmeldung und stabilste Fehler liefern. Die gleiche Anleitung sagt, dass ein vollständiger Einheitstest idealerweise in < 10 Sekunden abgeschlossen sein sollte und die Prüfung vor dem Commit in < 5 Sekunden bleiben sollte, laut dieser OpenReplay-Testanleitung Ich betrachte das als Budgetierungstool und nicht als Religion. Wenn sich die meisten Ihrer Anstrengungen auf End-to-End-Tests konzentrieren, werden Ihre Teammitglieder zu lange auf Rückmeldung warten. Wenn alles nur Einheitstests sind, werden Sie die realen Systemgrenzen verpassen.Für eine __CAPGO_KEEP_0__- oder Electron-Anwendung sieht ein gesunder Ausgleich normalerweise so aus: Einheitstestsfür Preislogik, Berechtigungsregeln, Serialisierung, Aktualisierungsbedingungen, Feature-Flags und Zustandsänderungen Integrationsprüfungen.

für Speicheradapter, Pluginwrappings und IPC-Verträge

For a Capacitor or Electron app, a healthy balance usually looks like this:

  • Unit tests for pricing logic, permissions rules, serialization, update eligibility, feature flags, and state transforms For a __CAPGO_KEEP_0__ or Electron app, a healthy balance usually looks like this:
  • I treat that as a budgeting tool, not a religion. If most of your effort goes into end-to-end tests, your team will wait too long for feedback. If everything is unit-only, you’ll miss real system boundaries. with unit tests providing the fastest feedback and most stable failures. The same guidance says a full unit suite should ideally finish in under 10 seconds, and pre-commit checks should stay under 5 seconds, according to this OpenReplay testing guide
  • E2E-Tests Für einige kritische Reisen wie Login, Kaufablauf, Synchronisierung oder Aktualisierungsanfragen

Der Coverage ist ein Lichtstrahl, nicht ein Ziel

Coverage-Berichte sind nützlich, wenn sie Ihnen helfen, ungetestete Zweige in wichtigen Logiken zu erkennen. Sie werden schädlich, wenn Teams Coverage-Prozentsätze für ihren eigenen Willen verfolgen.

Ein Login-Validator mit sorgfältigen Tests für Randfälle liefert mehr Wert als ein abgedeckter Datei voller trivialer Behauptungen. Das ist besonders wahr für inputreiche code wie Formulare, Parser, Datumlogik und Berechtigungsprüfungen. Wenn Ihr Team die Qualität um die Validierung schwerpunkthafter UI herum schärft, ist diese Anleitung zum Mastering von Frontend-Formvalidierung eine gute Ergänzung zur unit-level-Teststrategie.

Verhaltens-basierte Tests überstehen Refaktorisierungen

Ein zuverlässiger Satz sollte es Ihnen ermöglichen, interne Interna ohne die Hälfte der Tests neu zu schreiben. Der einfachste Weg, um dorthin zu gelangen, ist, das beobachtbare Verhalten statt Implementierungsdetails zu behaupten.

Verwendungsfälle, die gut halten:

  • Grenzwerte wie leerer Eingabewert, Null-Werte, ungültige Typen und übermäßige Zeichenketten
  • Bereichsergebnisse wie „Zugriffe verweigert wegen fehlender Berechtigung“
  • Zustandsübergänge wie „Update als ausstehend markiert nach Validierung des Metadatendownloads“

Verwendungsfälle, die oft verrotten:

  • Internen Hilfsfunktionen untersuchen
  • Private Methodenfolgen behaupten
  • Jeden Schichten der Aufrufkette mocken

Für App-Teams, die disziplinierte Release-Prozesse aufbauen, ist Capgo’s Artikel zu Anwendungsqualitätssicherung is nützlich, weil es die Testarbeit mit der breiteren Releasepipeline verbindet.

Testen für CI, Capacitor, und Electron-Apps

Ein Test, der nur auf einem Entwickler-Computer läuft, ist kein Sicherheitsnetz. Es ist eine lokale Gewohnheit.

CI wandelt die Einheitstests in JavaScript-Arbeit in Team-Infrastruktur um. Jeder Push, Pull-Request oder Release-Zweig kann die gleichen Befehle mit den gleichen Erwartungen ausführen. Diese Konsistenz ist noch wichtiger für Capacitor und Electron-Projekte, bei denen sich der Umgebungsdrift in subtilen Fehlern auswirkt.

Stelle CI als Standardausführungspfad fest

Zumindest sollte deine CI die Abhängigkeiten installieren und die Einheitssuite auf jedem Änderungssatz ausführen. Halte den Befehl so identisch wie möglich zum lokalen Entwicklung.

Eine grundlegende GitHub Actions-Aufgabe kann so klein wie folgt sein:

name: test

on: [push, pull_request]

jobs:
  unit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: actions/setup-node@v4
        with:
          node-version: '20'
      - run: npm ci
      - run: npm test

Das reicht aus, um fehlerhafte Imports, fehlende Behauptungen und zufällige Plattformannahmen vor dem Hineinlaufen in den Hauptcode zu erkennen.

Für mobile Teams, die durch automatisierte Pipelines liefern, hat Capgo eine praktische Anleitung zum Einrichten von CI/CD für Capacitor-Apps.

Testen von Capacitor-Plugininteraktionen

Die falsche Art, Einheitstests für Capacitor code zu erstellen, ist, native Plugins direkt in jede Dienstleistung zu pullen. Das koppelt deine Testsuite an die Plattformbrücke.

Bessere Muster sind dünne Abstraktionen:

// deviceStorage.js
async function saveFile(filesystem, path, data) {
  return filesystem.writeFile({ path, data });
}

module.exports = { saveFile };
// draftService.js
async function persistDraft(storage, draft) {
  await storage.save('draft.json', JSON.stringify(draft));
  return { saved: true };
}

module.exports = { persistDraft };
// draftService.test.js
const { persistDraft } = require('./draftService');

test('persists a serialized draft', async () => {
  const storage = {
    save: jest.fn().mockResolvedValue(undefined)
  };

  const result = await persistDraft(storage, { title: 'Hello' });

  expect(result).toEqual({ saved: true });
});

Das gleiche Konzept gilt für die Zugriff auf die Kamera, biometrische Anfragen, die Registrierung von Push-Token und den Netzwerkstatus. Halten Sie die Aufrufe von Plugins in Adapters. Testen Sie die Anwendungslogik gegen Interfaces, die Sie kontrollieren.

Testen Sie Electron-Haupt-Renderer und IPC code

Elektronische Anwendungen haben zwei wichtige Scharniere: Hauptprozess code und Renderer-Prozess code. Blenden Sie sie in Tests nicht.

Ein zuverlässiger Aufbau trennt normalerweise:

  • Einheiten-Tests für Renderer zur Sichtbarkeit von Modellen, Zustand, Formatierung und Geschäftslogik auf der Benutzeroberfläche
  • Einheiten-Tests für den Hauptprozess für Menüs, Dateioperationen und Entscheidungen zum Lebenszyklus der App
  • IPC-Vertragsprüfungen für die Form der Nachrichten und die erwarteten Antworten

Beispiel für eine IPC-Wrapper:

// ipcGateway.js
function sendSettings(ipcRenderer, payload) {
  ipcRenderer.send('settings:update', payload);
}

module.exports = { sendSettings };
// ipcGateway.test.js
const { sendSettings } = require('./ipcGateway');

test('sends settings update over ipc', () => {
  const ipcRenderer = { send: jest.fn() };

  sendSettings(ipcRenderer, { theme: 'dark' });

  expect(ipcRenderer.send).toHaveBeenCalledWith('settings:update', { theme: 'dark' });
});

Wenn Sie später die interne Implementierung von einem Helper zu einem anderen ändern, hält sich dieser Test noch immer, da er die verhaltensrelevanten Aspekte überprüft. Das ist der Standard, den Sie für Desktop- und Mobilgeräte haben möchten code.

Häufig gestellte Fragen zum JavaScript-Einheitstesten

Was ist der Unterschied zwischen Einheitstests und Integrationstests sowie E2E-Tests

A Ein Einheitstest prüft einen kleinen Teil der Logik in Isolation. Ein Integrationstest prüft, ob einige Komponenten oder Dienste korrekt zusammenarbeiten. Ein End-to-End-Test Übt eine Benutzerreise durch das laufende Anwendungsprogramm aus.

Verwenden Sie Einheitstests für schnelles Vertrauen in Geschäftsregeln. Verwenden Sie Integrations-Tests für Nahtstellen wie Speicher, Plugin-Wrapper und IPC. Verwenden Sie E2E-Tests sparsam für die Workflows, die ernsthafte Schäden verursachen würden, wenn sie zusammenbrechen.

Sollten wir uns auf volle Abdeckung richten

Nein. Vollständige Abdeckung kann Teams dazu zwingen, sich auf Tests zu konzentrieren, die keinen Wert haben.

Die Abdeckung ist nützlich, wenn sie riskante code offenlegt, die niemand ausprobiert hat. Sie ist nicht nützlich, wenn Ingenieure nur flache Behauptungen hinzufügen, um ein Dashboard zu erfüllen. Wenn Ihr Suite anfällig ist, wird mehr Abdeckung es nicht retten.

Wie fügen wir Tests an einem bestehenden Codebase hinzu

Beginnen Sie dort, wo Änderungen bereits stattfinden. Ersticken Sie das Team nicht und verkünden Sie eine riesige Überarbeitung der Teststrategie.

Ein praktischer Sequenz sieht wie folgt aus:

  • Schützen Sie aktive code zuerst indem Sie Tests zu Modulen hinzufügen, die Sie während der Feature-Arbeit oder Bug-Fixes berühren
  • Entziehen Sie reine Logik aus hart zu testenden Dateien, damit Geschäftsregeln ohne Framework- oder Laufzeitlärm getestet werden können
  • Fügen Sie Schweißhüllen hinzu um native Plugins, Netzwerkclients, Dateisystemaufrufe und Electron-IPC umzuwandeln
  • Weigern Sie sich gegen verderbliche Muster wenn Sie Mocks einführen. Leitfaden aus JavaScript-Testbest Practices ist hier besonders nützlich, da er das oft übersehene Problem der Über-Mockung und die folgenden verderblichen Tests hervorhebt

Das Ziel ist nicht die sofortige Vollständigkeit. Es ist ein stetiger Fortschritt in den Bereichen, in denen Rückschritte dem Team am meisten Kosten


Wenn Ihr Team Capacitor oder Electron Apps benötigen eine saubere Release-Prozess um JavaScript-Änderungen zu verwalten, Capgo ist eine Option, die man in Betracht ziehen sollte. Es bietet live aktualisierte Updates für CapacitorJS- und Electron-Apps, mit Rollout-Kontrollen und -Beobachtung, damit Teams solide Einheitstests mit einer sicheren Route zum Versand von Web-Bundle-Änderungen ohne auf jede Korrektur warten zu müssen,

Live-Updates für Capacitor-Apps

Wenn ein Web-Schicht-Bug live ist, liefern Sie die Reparatur über Capgo anstatt Tage für die Genehmigung im App-Store zu warten. Die Benutzer erhalten die Aktualisierung im Hintergrund, während native Änderungen im normalen Review-Verfahren bleiben.

Los geht's jetzt

Latest from our Blog

Capgo bietet Ihnen die besten Einblicke, die Sie benötigen, um eine wirklich professionelle Mobil-App zu erstellen.