বিভিন্ন Chrome এক্সটেনশানগুলি কাজ করছেন আমি নিয়ে এসেছেন sinon-chrome
প্রকল্পের যে ইউনিট-পরীক্ষার ব্যবহার চালাতে সক্ষম mocha
, nodejs
এবং phantomjs
।
মূলত, এটি সমস্ত chrome.*
API এর সিনন মক তৈরি করে যেখানে আপনি কোনও পূর্বনির্ধারিত জসন প্রতিক্রিয়া রাখতে পারেন।
এরপরে, আপনি vm.runInNewContext
ব্যাকগ্রাউন্ড পৃষ্ঠার জন্য নোড ব্যবহার করে এবং phantomjs
পপআপ / বিকল্প পৃষ্ঠা রেন্ডার করার জন্য আপনার স্ক্রিপ্টগুলি লোড করুন।
এবং অবশেষে, আপনি দৃsert়ভাবে দাবি করেন যে ক্রোম এপিআইকে প্রয়োজনীয় যুক্তি দিয়ে ডাকা হয়েছিল।
আসুন একটি উদাহরণ
নিই : ধরুন আমাদের কাছে সহজ ক্রোম এক্সটেনশন রয়েছে যা বোতামের ব্যাজে খোলা ট্যাবগুলির সংখ্যা প্রদর্শন করে।
পটভূমি পৃষ্ঠা:
chrome.tabs.query({}, function(tabs) {
chrome.browserAction.setBadgeText({text: String(tabs.length)});
});
এটি পরীক্ষা করার জন্য আমাদের প্রয়োজন:
chrome.tabs.query
পূর্বনির্ধারিত প্রতিক্রিয়া, উদাহরণস্বরূপ দুটি ট্যাব ফেরানোর জন্য মক করুন ।
chrome.*
কিছুটা পরিবেশে আমাদের উপহাস এপিআই ইনজেক্ট করুন
- এই পরিবেশে আমাদের এক্সটেনশন কোড চালান
- বোতাম ব্যাজটি '2' এর সমান
কোড স্নিপেট নিম্নলিখিত:
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"
});
এখন আমরা এটি মোচার describe..it
ফাংশনগুলিতে মোড়তে পারি এবং টার্মিনাল থেকে চালাতে পারি:
$ mocha
background page
✓ should display opened tabs count in button badge
1 passing (98ms)
আপনি এখানে পুরো উদাহরণ খুঁজে পেতে পারেন ।
অতিরিক্তভাবে, সিনোন-ক্রোম পূর্বনির্ধারিত প্রতিক্রিয়া সহ যে কোনও ক্রোম ইভেন্টকে ট্রিগার করতে দেয়
chrome.tab.onCreated.trigger({url: 'http://google.com'});