首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何测试chrome扩展?

如何测试chrome扩展?
EN

Stack Overflow用户
提问于 2010-05-20 06:12:46
回答 7查看 46.5K关注 0票数 170

有什么好方法可以做到这一点吗?我正在编写一个扩展,它作为内容脚本与网站交互,并使用本地存储保存数据。有没有什么工具、框架等可以用来测试这个行为呢?我知道有一些通用的工具来测试javascript,但是这些工具足够强大来测试一个扩展吗?单元测试是最重要的,但我也对其他类型的测试(如集成测试)感兴趣。

EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2010-05-25 02:44:57

是的,现有的框架非常有用。

最近,我将所有的测试放在一个“测试”页面上,该页面嵌入到应用程序中,但除非以物理方式输入,否则无法访问。

例如,我将一个页面中的所有测试都放在

测试将可以访问

为了访问内容脚本,理论上你可以通过测试页面中嵌入的IFRAMEs来测试它,然而这些是更多的集成级测试,单元测试将要求你从实际页面中抽象出来,这样你就不需要依赖它们了,就像访问localStorage一样。

如果您想要直接测试页面,您可以编排您的扩展来打开新的选项卡(chrome.tab.create({"url“:"someurl"})。对于每个新选项卡,您的内容脚本都应该运行,并且您可以使用您的测试框架来检查您的代码是否完成了它应该做的事情。

至于框架,

JsUnit

或更新的

茉莉

应该工作得很好。

票数 118
EN

Stack Overflow用户

发布于 2014-11-06 20:41:14

在做几个chrome扩展时,我想到了

允许使用以下命令运行单元测试的项目

..。

基本上,它创建了所有的sinon mock

API,您可以在其中放置任何预定义的json响应。

接下来,使用node的

对于背景页和

用于渲染弹出/选项页面。

最后,您断言使用所需的参数调用了chrome api。

让我们举个例子:

假设我们有一个简单的chrome扩展,它在按钮标记中显示打开的标签数量。

背景页:

代码语言:javascript
复制
chrome.tabs.query({}, function(tabs) {
  chrome.browserAction.setBadgeText({text: String(tabs.length)});
});

要测试它,我们需要:

模拟

返回预定义的响应,例如两个选项卡。

注入我们的mocked

api引入到某些环境中

在此环境中运行我们的扩展代码

断言按钮徽章等于'2‘

代码片段如下:

代码语言:javascript
复制
const vm = require('vm');
const fs = require('fs');
const chrome = require('sinon-chrome');

// 1. mock `chrome.tabs.query` to return predefined response 
chrome.tabs.query.yields([
  {id: 1, title: 'Tab 1'}, 
  {id: 2, title: 'Tab 2'}
]);

// 2. inject our mocked chrome.* api into some environment
const context = {
  chrome: chrome
};

// 3. run our extension code in this environment
const code = fs.readFileSync('src/background.js');
vm.runInNewContext(code, context);

// 4. assert that button badge equals to '2'
sinon.assert.calledOnce(chrome.browserAction.setBadgeText);
sinon.assert.calledWithMatch(chrome.browserAction.setBadgeText, {
  text: "2"
});

现在我们可以把它包进摩卡咖啡里了

函数,并从终端运行:

代码语言:javascript
复制
$ mocha

background page
  ✓ should display opened tabs count in button badge

1 passing (98ms)

你可以找到完整的例子

这里

..。

此外,sinon-chrome允许使用预定义的响应触发任何chrome事件,例如

代码语言:javascript
复制
chrome.tab.onCreated.trigger({url: 'http://google.com'});
票数 67
EN

Stack Overflow用户

发布于 2018-01-29 23:51:48

似乎工作很好,你也可以只使用普通的茉莉和模拟你需要的Chrome回调。示例:

模拟

代码语言:javascript
复制
chrome = {
  runtime: {
    onMessage : {
      addListener : function() {}
    }
  }
}

测试

代码语言:javascript
复制
describe("JSGuardian", function() {

  describe("BlockCache", function() {

    beforeEach(function() {
      this.blockCache = new BlockCache();
    });

    it("should recognize added urls", function() {
      this.blockCache.add("http://some.url");
      expect(this.blockCache.allow("http://some.url")).toBe(false);
    });
} // ... etc

只需修改默认设置

来运行你的代码。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2869827

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档