Модульное тестирование расширений Chrome

Модульное тестирование позволяет тестировать небольшие участки кода изолированно от остальной части вашего расширения и за пределами браузера. Например, вы можете написать модульный тест, чтобы убедиться, что вспомогательный метод правильно записывает значение в хранилище.

Код, написанный без использования API расширений, можно тестировать как обычно, используя такую ​​среду, как Jest . Чтобы упростить тестирование кода таким способом, рассмотрите возможность использования таких методов, как внедрение зависимостей , которые могут помочь удалить зависимости от пространства имен Chrome в вашей реализации нижнего уровня.

Если вам нужно протестировать код, включающий API-интерфейсы расширений, рассмотрите возможность использования макетов.

Пример: использование макетов с Jest

Создайте файл jest.config.js , в котором объявляется файл установки, который будет запускаться перед всеми тестами:

jest.config.js:

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

В mock-extension-apis.js добавьте реализации для конкретных функций, которые вы собираетесь вызывать:

макет-расширение-apis.js:

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

Затем используйте jest.spy для имитации возвращаемого значения в тесте:

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

Следующие шаги

Чтобы убедиться, что ваше расширение работает должным образом, мы рекомендуем добавить сквозные тесты . Подробное руководство см. в разделе «Тестирование расширений Chrome с помощью Puppeteer» .