Ich versuche, Funktionen zu testen, während ich eine Chrome-Erweiterung entwickle. Für mein Test-Framework verwende ich Sinon (zum Spionieren, Mock und Stub), Mocha, Chai und Jsdom (um ein Dom zu erstellen, das meinen Chrome-Erweiterungshintergrund und Popup-Skripte ausführt).Wie spioniert man JavaScript-Funktionen in einem Skript aus, das zu Testzwecken in eine jsdom injiziert wird?
Allerdings kann ich nicht in der Lage sein, die Funktionen im Skript (background.js) auszuspionieren, die ich in die jsdom injiziere.
Das ist, was ich tue:
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 :(
});
});
Ich vermute, dass das Problem mit entweder einem falschen Import zu tun hat/export oder dass das in das jsdom injizierte Skript background.js nicht vom Spion umschlossen wird. Ich würde es wirklich schätzen, wenn jemand dieses Problem beleuchten könnte!
Ich vermute, das folgende kann etwas Licht werfen: https://stackoverflow.com/questions/5605961/what-is-the-difference-between-jsdom-env-and-jsdom-jsdom – beaumontwebdev
Bitte [bearbeiten] die Frage am Thema sein: ein [mcve] einbeziehen, das * das Problem dupliziert *. Für Chrome-Erweiterungen oder Firefox-WebExtensions müssen Sie fast immer Ihre * manifest.json * und einige der Hintergrund-, Inhalts- und/oder Popup-Skripte/HTML und häufig Webseiten-HTML/-Skripte einschließen. Fragen, die Debugging-Hilfe suchen ("Warum funktioniert mein Code nicht so, wie ich es möchte?") muss beinhalten: (1) das gewünschte Verhalten, (2) ein spezifisches Problem oder einen Fehler und (3) den kürzesten Code, der notwendig ist, um es * in der Frage selbst zu reproduzieren. * Siehe auch: [Welche Themen kann ich hier fragen? ?] (/ help/on-topic) und [fragen]. – Makyen