Einheitentests für Chrome-Erweiterungen

Mit Einheitstests können kleine Codeabschnitte unabhängig vom Rest Ihrer Erweiterung und außerhalb des Browsers getestet werden. Sie könnten z. B. einen Unittest schreiben, um sicherzustellen, dass eine Hilfsmethode einen Wert korrekt in den Speicher schreibt.

Code, der ohne Erweiterungs-APIs geschrieben wurde, kann wie gewohnt mit einem Framework wie Jest. Um Code einfacher auf diese Weise testen zu können, sollten Sie Techniken wie Abhängigkeitsinjektion, die helfen kann, Abhängigkeiten von Chrome zu entfernen Namespace in Ihrer Implementierung auf niedrigerer Ebene.

Wenn Sie Code testen möchten, der Erweiterungs-APIs enthält, sollten Sie Mocks verwenden.

Beispiel: Mocks mit Jest verwenden

Erstellen Sie eine jest.config.js-Datei, die eine Setup-Datei deklariert, die vor allen Tests ausgeführt wird:

jest.config.js:

module.exports = {
  setupFiles: ['<rootDir>/mock-extension-apis.js']
};

Fügen Sie in mock-extension-apis.js Implementierungen für die Funktionen hinzu, die Sie aufrufen möchten:

mock-extension-apis.js:

global.chrome = {
  tabs: {
    query: async () => { throw new Error("Unimplemented.") };
  }
};

Verwenden Sie dann jest.spy, um einen Rückgabewert in einem Test zu simulieren:

test("getActiveTabId returns active tab ID", async () => {
  jest.spyOn(chrome.tabs, "query").mockResolvedValue([{
    id: 3,
    active: true,
    currentWindow: true
  }]);
  expect(await getActiveTabId()).toBe(3);
});

Nächste Schritte

Damit Ihre Erweiterung wie erwartet funktioniert, empfehlen wir End-to-End-Tests. Eine vollständige Anleitung finden Sie unter Chrome-Erweiterungen mit Puppeteer testen.