การทำงานในส่วนขยายโครเมี่ยมหลายฉันมากับsinon-chrome
โครงการที่จะช่วยให้การเรียกใช้การทดสอบหน่วยใช้mocha
, และnodejs
phantomjs
โดยพื้นฐานแล้วมันสร้าง sinon mocks ของchrome.*
API ทั้งหมดที่คุณสามารถใส่คำตอบ json ที่กำหนดไว้ล่วงหน้า
ถัดไปคุณโหลดสคริปต์โดยใช้โหนดvm.runInNewContext
สำหรับหน้าพื้นหลังและphantomjs
สำหรับการแสดงผลหน้าป๊อปอัพ / ตัวเลือก
และในที่สุดคุณยืนยันว่า Chrome API ถูกเรียกใช้พร้อมกับอาร์กิวเมนต์ที่จำเป็น
ลองมาตัวอย่าง:
สมมติว่าเรามีส่วนขยายโครเมี่ยมอย่างง่ายที่แสดงจำนวนแท็บที่เปิดในป้ายปุ่ม
หน้าพื้นหลัง:
chrome.tabs.query({}, function(tabs) {
chrome.browserAction.setBadgeText({text: String(tabs.length)});
});
เพื่อทดสอบเราต้องการ:
- จำลอง
chrome.tabs.query
เพื่อกลับคำตอบที่กำหนดไว้ล่วงหน้าเช่นสองแท็บ
- ฉีด
chrome.*
API ที่เยาะเย้ยของเราในสภาพแวดล้อมบางอย่าง
- เรียกใช้รหัสส่วนขยายของเราในสภาพแวดล้อมนี้
- ยืนยันว่าปุ่มตราเท่ากับ '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)
คุณสามารถหาตัวอย่างเต็มรูปแบบที่นี่
นอกจากนี้ sinon-chrome ช่วยให้สามารถเรียกใช้เหตุการณ์ chrome ใด ๆ ที่มีการตอบสนองที่กำหนดไว้ล่วงหน้าเช่น
chrome.tab.onCreated.trigger({url: 'http://google.com'});