我試圖在開發Chrome擴展時測試函數。對於我的測試框架,我使用sinon(窺探,模擬和存根),mocha,chai和jsdom(創建一個執行我的Chrome擴展背景和彈出腳本的dom)。如何監視腳本中的JavaScript函數,並將其注入jsdom以用於測試目的?
但是,我似乎無法窺探腳本中的函數(background.js),我將其注入到jsdom中。
這是我在做什麼:
background.js
function searchTabs() {...}
searchTabs();
module.exports.searchTabs = searchTabs;
background.test.js
var fs = require('fs');
var sinon = require('sinon');
var chrome = require('sinon-chrome');
var assert = require('chai').assert;
var jsdom = require('jsdom');
var bg = require('background.js');
var window;
var spy;
describe('background page', function() {
beforeEach(function() {
jsdom.env({
html: '<html></html>',
src: [
fs.readFileSync('background.js', 'utf-8'), // Inject script into jsdom
],
created: ...,
done: ...,
});
});
afterEach(function() {
chrome.reset();
window.close();
});
it('should call searchTabs', function() {
spy = sinon.spy(bg.searchTabs);
sinon.assert.calledOnce(spy); // This is not called :(
});
});
我懷疑問題有任何一個不正確的進口做/ export或注入jsdom的background.js腳本不被間諜包裝。如果有人能夠解決這個問題,我會非常感激!
我懷疑以下可能會說明一些光:https://stackoverflow.com/questions/5605961/what-is-the-difference-between-jsdom-env-and-jsdom-jsdom – beaumontwebdev
請[編輯]問題成爲話題:包括一個[重複問題*]的[mcve]。對於Chrome擴展程序或Firefox Web擴展程序,幾乎總是需要包含* manifest.json *和一些背景,內容和/或彈出腳本/ HTML以及常用的網頁HTML /腳本。尋求調試的問題幫助(「爲什麼我的代碼不按我想要的方式工作?「)必須包括:(1)期望的行爲,(2)特定的問題或錯誤,以及(3)在問題本身中重現*所需的最短代碼*。另請參閱:[我可以在此處詢問哪些主題?](/ help/on-topic)和[問]。 – Makyen