Estoy escribiendo una prueba para una función MyFuntion y llama a otra función sendTouchEvent que instancia un TouchEvent.
function sendTouchEvent(element, eventType) { const touch = new Touch({ ... }); const touchEvent = new TouchEvent(eventType, { ... }); element.dispatchEvent(touchEvent); }Mi prueba es así:
const { test, expect } = require("@jest/globals"); const fs = require('fs'); const chrome = require("sinon-chrome"); const { JSDOM } = require("jsdom"); const dom = new JSDOM() global.document = dom.window.document global.window = dom.window global.chrome = chrome global.MutationObserver = class { constructor(callback) {} disconnect() {} observe(element, initObject) {} }; jest.dontMock('jquery'); $ = jQuery = require("jquery"); global.$ = $ global.jQuery = jQuery const content = require("../content"); const data = require("./fixtures/data.json"); test("get data", () => { const mod = rewire("../content") mod.__set__('data', data) // mocking json data var el = document.createElement("div") el.innerHTML = html_str; // loaded before with fs.readFileSync expect(content.MyFunction(el)).toBe({}) })Mi archivo jest.setup.js es así:
$ = require("jquery"); global.$ = $; global.window.$ = $;Y estoy recibiendo este error:
TypeError: $ is not a function 207 | }); 208 | > 209 | const touchEvent = new TouchEvent(eventType, { | ^ 210 | cancelable: true, 211 | bubbles: true, 212 | touches: [touch], at extension/content.js:209:48 at Object.<anonymous> (extension/content.js:411:4) at Object.load (node_modules/rewire/lib/moduleEnv.js:55:18) at internalRewire (node_modules/rewire/lib/rewire.js:49:15) at rewire (node_modules/rewire/lib/index.js:11:12) at Object.<anonymous> (extension/tests/content.test.js:26:17) Ya intenté burlarme de la función sendTouchEvent , pero no funciona. También intenté inyectar $ usando rewire mod.__set__ .
¿Alguien sabe cómo arreglar esto?
Descubrí que el problema era el rewire lib. Por alguna razón, estaba jugando con los eventos de la ventana. Lo elimino y cambio mi código para poder simular la variable de data sin volver a rewire