Einheitentests für Chrome-Erweiterungen

Bei Einheitentests können kleine Codeabschnitte isoliert vom Rest der Erweiterung und außerhalb des Browsers getestet werden. Sie können beispielsweise einen Einheitentest 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 getestet werden. Damit Code auf diese Weise einfacher getestet werden kann, sollten Sie Techniken wie die Abhängigkeitsinjektion in Betracht ziehen, um Abhängigkeiten vom Chrome-Namespace in Ihrer untergeordneten Implementierung zu entfernen.

Wenn Sie Code testen müssen, der Erweiterungs-APIs enthält, sollten Sie Simulationen verwenden.

Beispiel: Mock-ups mit Jest verwenden

Erstellen Sie eine jest.config.js-Datei, die eine Einrichtungsdatei 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 spezifischen Funktionen hinzu, die aufgerufen werden sollen:

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. Ein vollständiges Tutorial finden Sie unter Chrome-Erweiterungen mit Puppeteer testen.