Есть ли хороший способ сделать это? Я пишу расширение, которое взаимодействует с веб-сайтом как сценарий контента и сохраняет данные, используя localstorage. Существуют ли какие-либо инструменты, фреймворки и т. Д., Которые я могу использовать для проверки этого поведения? Я понимаю, что есть некоторые общие инструменты для тестирования javascript, но достаточно ли они для тестирования расширения? Модульное тестирование является самым важным, но меня также интересуют другие типы тестирования (например, интеграционное тестирование).Как протестировать хромированные расширения?
ответ
Да, существующие рамки довольно полезны ..
В недавнем прошлом, я поместил все мои тесты на странице «тест», который был встроен в приложение, но не достижимой, если физически не наберется.
Например, я бы все тесты на странице, доступной под chrome-extension://asdasdasdasdad/unittests.html
Тесты будут иметь доступ к localStorage
и т.д. Для доступа скрипты содержания, в теории можно проверить, что через встроенные фреймы в тестовой странице , однако это больше тестирование уровня интеграции, модульные тесты потребуют от вас отвлечь это от реальных страниц, чтобы вы не зависели от них, также как и доступ к localStorage.
Если вы хотите протестировать страницы напрямую, вы можете упорядочить расширение, чтобы открыть новые вкладки (chrome.tab.create ({"url": "someurl"}). Для каждой новой вкладки должен запускаться ваш скрипт контента и вы можете использовать среду тестирования, чтобы проверить, что код сделал то, что он должен делать
Как каркасные, JsUnit или более недавнее Jasmine должны работать нормально
Вы правы, тестирование реальных страниц не подпадает под модульное тестирование. Я должен был расспросить мой вопрос более широко. Но это еще что-то, что я хотел бы протестировать, тем более, что структура сайта html может измениться в любое время. Я изменил вопрос. – swampsjohn
Я бы тестировал через IFrames на странице тестирования устройства. Сценарии содержимого должны по-прежнему запускаться (если вы включите скрипты для запуска в iFrame) – Kinlan
У расширения прокси-сервера есть несколько тестов, которые просто издеваются над битами и частями API-интерфейсов Chrome, которые были необходимы: http://code.google. com/chrome/extensions/samples.html # chrome.proxy .. Также наш коллега Борис использовал QUnit для тестирования своего «модельного» слоя: https://github.com/borismus/Question-Monitor-for-Stack-Exchange/ tree/master/tests –
О уже существующем инструменте в Chrome:..
В c hrome, есть раздел для ресурсов для локального хранилища.
Developer Tools> Ресурсы> Local Storage
Смотрите изменения LocalStorage там.
Вы можете использовать console.profile для проверки производительности и просмотра стека вызовов времени выполнения.
- для FileSystem Вы можете использовать этот URL, чтобы проверить файл, это загрузить-редактор или нет: файловой система: хром-расширения: /// временного/
Если вы будете использовать скрипт контента и локальное хранение вместе без фоновой страницы/скрипта и без передачи сообщений локальное хранилище будет доступно только с этого сайта. Итак, чтобы протестировать эти страницы, вы должны ввести тестовый скрипт на эти вкладки.
Не работало для меня, но это заставило меня дальше в моем javascript. +1 для этого. – mobibob
Для файловой системы Вы можете использовать: файловая система: chrome-extension: //
Работа на нескольких хромированных расширений я придумал sinon-chrome
проект, который позволяет запускать юнит-тесты с использованием mocha
, nodejs
и phantomjs
.
Basicaly, он создает синонные издевки всех chrome.* api
, где вы можете разместить любые предопределенные ответы json.
Далее вы загружаете свои скрипты с помощью vm.runInNewContext
узла для фоновой страницы и phantomjs
для страницы всплывающего окна/параметров.
И, наконец, вы утверждаете, что хром-апи был вызван с необходимыми аргументами.
Давайте рассмотрим пример:
Предположим, что мы имеем простое расширение хром, который отображает количество открытых вкладок в кнопку пропуска.
фона страницы:
chrome.tabs.query({}, function(tabs) {
chrome.browserAction.setBadgeText({text: String(tabs.length)});
});
Чтобы проверить это нам нужно:
- издеваться
chrome.tabs.query
вернуть предопределенный ответ, например, две вкладки. . - впрыснуть наш высмеивал хром * апи в некоторой среде
- запустить наш код расширения в этой среде
- утверждают, что значок кнопки равен «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.tab.onCreated.trigger({url: 'http://google.com'});
звучит хорошо - я определенно дам ему вращение! – jakabadambalazs
Ссылка на пример кажется мертвой - не могли бы вы ее обновить? – Raisen
Обновлена ссылка на пример. Кроме того, sinon-chrome теперь перемещается на https://github.com/acvetkov, и скоро появятся новые примеры – vitalets
Хотя 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. Как анализировать хромированные расширения?
- 2. Безопасны ли хромированные расширения?
- 3. Хромированные расширения - используйте существующую функцию
- 4. Как использовать хромированные расширения с Selenium Webdriver
- 5. C# - как протестировать методы расширения?
- 6. Хромированные расширения - вставлять значки в страницу
- 7. Отключить хромированные расширения для посетителей определенного веб-сайта?
- 8. Хромированные расширения: простая передача сообщений против хромированного соединения
- 9. Возможность веб-сайта отслеживать хромированные расширения пользователя или их поведение?
- 10. Хромированные пиксели рендеринга как фракции
- 11. Как закрыть хромированные пользовательские вкладки
- 12. Я хочу блокировать хромированные расширения или любые расширения, когда кто-то использует мое приложение (Codeignite baser)
- 13. Как протестировать платную версию вашего хромового расширения без оплаты?
- 14. Получить все хромированные окна
- 15. получить бегущие хромированные приложения со справочной страницы
- 16. Автономные хромированные приложения
- 17. Хромированные перетаскивания DivX
- 18. Как получить хромированные расширения для выполнения функции в фоновом режиме при загрузке страницы?
- 19. Пользовательские хромированные окна в wpf
- 20. Применить хромированные вкладки в Qt
- 21. Как создать хромированные вкладки с перфориями
- 22. Java - Как получить все хромированные вкладки?
- 23. Как использовать хромированные данные просмотра javascript api?
- 24. Почему не работают хромированные вкладки?
- 25. Принудительные хромированные вкладки к сбою
- 26. Получить хромированные журналы в WebdriverIO
- 27. Хромированные задержки на производительности JavaScript
- 28. Хромированные звуковые сигналы на removeAllRanges();
- 29. Хромированные спрайты загрузки с Pixi.js
- 30. Могут ли хромированные расширения изменять меню горизонтальных вкладок поверх веб-браузера?
Я только что написал канонический ответ, который посвящен тестированию модулей и тестированию интеграции для расширений браузера в * всех * браузерах, а не только в Chrome. См. [Ответ на «Тестирование расширений браузера»] (http://stackoverflow.com/a/17370531/938089). –