J'essaye de tester des fonctions tout en développant une extension de chrome. Pour mon framework de test, j'utilise sinon (pour espionner, simuler, et stub), mocha, chai, et jsdom (pour créer un dom qui exécute mon arrière-plan d'extension chromée et des scripts popups). Cependant, je n'arrive pas à espionner les fonctions du script (background.js) que j'injecte dans le jsdom.Comment espionner les fonctions javascript dans un script qui est injecté dans un jsdom à des fins de test?
C'est ce que je fais:
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 :(
});
});
Je soupçonne que le problème doit faire avec soit une importation incorrecte/export ou que le script background.js injecté dans le jsdom n'est pas enveloppé par l'espion. J'apprécierais vraiment si quelqu'un peut faire la lumière sur ce problème!
Je soupçonne que ce qui suit peut faire la lumière: https://stackoverflow.com/questions/5605961/what-is-the-difference-between-jsdom-env-and-jsdom-jsdom – beaumontwebdev
S'il vous plaît [modifier] la question être sur le sujet: inclure un [mcve] qui * duplique le problème *. Pour les extensions Chrome ou Firefox WebExtensions, vous devez presque toujours inclure votre * manifest.json * et une partie de l'arrière-plan, du contenu et/ou des scripts contextuels/HTML, et souvent des HTML/scripts de pages Web. Des questions sur l'aide au débogage («Pourquoi mon code ne fonctionne-t-il pas comme je le souhaite?") doit inclure: (1) le comportement désiré, (2) un problème ou une erreur spécifique et (3) le code le plus court nécessaire pour le reproduire * dans la question elle-même * Voir aussi: [Quels sujets puis-je poser ici? ?] (/ help/on-topic), et [demander]. – Makyen