Einheitentests für Chrome-Erweiterungen

Mit Einheitentests können kleine Codeabschnitte isoliert vom Rest getestet werden. der Erweiterung und außerhalb des Browsers. Sie können beispielsweise einen Unit-Test 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 auf diese Weise einfacher 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, in der eine Einrichtungsdatei deklariert wird, 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.