对 Chrome 扩展程序进行单元测试

通过单元测试,您可以在扩展程序的其余部分单独测试一小段代码,也无需在浏览器之外进行测试。例如,您可以编写单元测试,以确保辅助方法正确地将值写入存储空间。

可以使用 Jest 等框架对未使用扩展 API 编写的代码进行正常测试。为了更轻松地以这种方式测试代码,请考虑使用依赖项注入等技术,这有助于在较低级别的实现中移除对 Chrome 命名空间的依赖。

如果您需要测试包含扩展程序 API 的代码,请考虑使用模拟。

示例:通过 Jest 使用模拟

创建一个 jest.config.js 文件,用于声明一个在所有测试之前运行的设置文件:

jest.config.js:

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

mock-extension-apis.js 中,为您希望调用的特定函数添加实现:

mock-extension-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);
});

后续步骤

为了确保您的扩展程序按预期运行,我们建议您添加端到端测试。如需查看完整教程,请参阅使用 Puppeteer 测试 Chrome 扩展程序