有没有一个很好的方法来做到这一点?我正在编写一个扩展,作为内容脚本与网站交互,并使用localstorage保存数据。是否有任何工具,框架等可用于测试此行为?我意识到有一些用于测试JavaScript的通用工具,但那些测试扩展的功能是否足够?单元测试是最重要的,但我也对其他类型的测试(如集成测试)感兴趣。如何测试Chrome扩展?
回答
是,现有的框架是非常有用的..
在最近的过去,我已经把那个被嵌入到应用程序,但无法到达,除非身体类型“测试”页面上我的所有测试。
举例来说,我会在访问一个页面中的所有测试下chrome-extension://asdasdasdasdad/unittests.html
测试将有机会获得localStorage
等用于访问内容的脚本,在理论上可以测试,通过测试页的IFRAME嵌入但是,这些是更多的集成级别测试,单元测试会要求您将其从实际页面抽象出来,以便您不依赖它们,同样可以访问localStorage。
如果您想要直接测试页面,您可以编排您的扩展以打开新标签(chrome.tab.create({“url”:“someurl”})。对于每个新标签,您的内容脚本应该运行你可以使用你的测试框架来检查你的代码做了它应该做的
你是对的,测试真实页面不属于单元测试。我应该提出更广泛的问题。但它仍然是我想测试的东西,尤其是因为网站的html结构可能会随时更改。我修改了这个问题。 – swampsjohn 2010-05-24 19:39:02
我会通过单元测试页面中的IFrame进行测试。内容脚本应该仍然会触发(如果您启用脚本以在iFrame中运行) – Kinlan 2010-05-24 19:55:44
代理示例扩展有一些测试,它们只是模拟必需的Chrome API的各个部分:http://code.google。 com/chrome/extensions/samples.html#chrome.proxy ..同样我们的同事Boris使用QUnit来测试他的“模型”层:https://github.com/borismus/Question-Monitor-for-Stack-Exchange/树/主/测试 – 2012-01-17 20:27:32
关于在Chrome中已经存在的工具:。
在c hrome开发人员工具,有资源的部分用于本地存储。
开发工具>资源>本地存储
见的localStorage那里的变化。
您可以使用console.profile来测试性能并监视运行时调用堆栈。
- 的文件系统,您可以使用此URL来检查您的文件上传,编辑或不: 文件系统:铬扩展:///临时/
如果您是使用内容脚本和本地存储没有后台页面/脚本和没有消息传递的情况下,只能从该站点访问本地存储。 因此,要测试这些页面,您必须在这些选项卡中插入测试脚本。
没有为我工作,但它确实让我进一步沿着我的JavaScript。 +1。 – mobibob 2014-04-20 02:24:18
对于fileSystem您可以使用: 文件系统:chrome-extension://
工作几个扩展我想出了sinon-chrome
项目,允许使用mocha
,nodejs
和phantomjs
运行单元测试。
Basicaly,它创建所有chrome.* api
的sinon mocks,您可以在其中放置任何预定义的json响应。
接下来,使用节点的vm.runInNewContext
作为背景页面,使用phantomjs
作为渲染弹出窗口/选项页面加载脚本。
最后,你断言chrome api被调用了所需的参数。
让我们举个例子:
假设我们有一个显示在按钮徽章打开的标签数简单的Chrome扩展程序。
背景页:
chrome.tabs.query({}, function(tabs) {
chrome.browserAction.setBadgeText({text: String(tabs.length)});
});
为了测试它,我们需要:
- 模拟
chrome.tabs.query
返回预定义的响应,例如两个选项卡。 。 - 注入我们的嘲笑铬* API到一些环境
- 运行我们的扩展代码在这种环境下
- 断言,胸章等于“2”
的代码片段是以下几点:
var vm = require('vm');
var fs = require('fs');
var 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
var context = {
chrome: chrome;
};
// 3. run our extension code in this environment
var 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"
});
现在,我们可以把它包装成摩卡的describe..it
功能,从终端上运行
$ mocha
background page
✓ should display opened tabs count in button badge
1 passing (98ms)
你可以找到完整的例子here。
此外,sinon-chrome允许以预定义的响应触发任何chrome事件,例如,
chrome.tab.onCreated.trigger({url: 'http://google.com'});
听起来不错 - 我一定会给它一个旋转! – jakabadambalazs 2015-02-07 16:49:58
这个例子的链接似乎已经死了 - 你能否更新它? – Raisen 2015-12-07 20:55:33
更新了示例链接。此外,sinon-chrome现在已移至https://github.com/acvetkov,并且很快就会有新的例子 – vitalets 2015-12-10 14:13:58
虽然sinon.js
似乎工作的伟大,你也可以只使用普通的茉莉花和嘲笑你需要安装Chrome回调。例如:
chrome = {
runtime: {
onMessage : {
addListener : function() {}
}
}
}
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
只需修改默认SpecRunner.html
来运行代码。
- 1. Chrome扩展测试
- 2. Chrome扩展开发:如何测试onTabReplaced?
- 3. 单元测试Chrome扩展?
- 4. 调试Chrome扩展
- 5. Selenium WebDriverJS - 测试Chrome扩展安装
- 6. 摩卡测试,Yeoman,Chrome扩展
- 7. 在本地测试Chrome扩展API
- 8. 测试Chrome扩展 - 要求错误
- 9. 如何检测安装的Chrome扩展
- 10. 如何检测Chrome扩展卸载
- 11. 如何调试chrome devtools面板扩展?
- 12. 如何使用console.log()调试Chrome扩展?
- 13. 如何测试Chrome扩展程序/ Firefox WebExtension代码?
- 14. 如何用业力测试e2e google chrome扩展?
- 15. 如何在本地测试Chromium/Chrome扩展的内联安装?
- 16. 如何测试Chrome扩展程序购买而不发布?
- 17. 调试Chrome扩展的popup.html?
- 18. 试图评估Chrome扩展
- 19. Chrome浏览器API的Google Chrome扩展集成测试
- 20. 测试扩展AbstractPdfView
- 21. 测试Swift扩展
- 22. 如何停止Chrome扩展?
- 23. 如何分析chrome扩展?
- 24. 如何托管Chrome扩展?
- 25. 如何在Chrome扩展
- 26. 如何使用Chrome扩展
- 27. 我如何在html中扩展视频以扩展Chrome扩展
- 28. 如何测试Symfony2 Bundle扩展:: load()?
- 29. 如何单元测试角度扩展
- 30. C# - 如何测试扩展方法?
我刚写过一个规范的答案,它解决了所有*浏览器中浏览器扩展的单元测试和集成测试问题,而不仅仅是Chrome。请参阅[对“测试浏览器扩展”的答案](http://stackoverflow.com/a/17370531/938089)。 – 2013-06-28 21:52:06