【问题标题】:jest TouchEvent TypeError: $ is not a function开玩笑的 TouchEvent TypeError: $ 不是函数
【发布时间】:2021-08-22 01:53:16
【问题描述】:

我正在为函数 MyFuntion 编写一个测试,它调用另一个函数 sendTouchEvent 来实例化一个 TouchEvent。

function sendTouchEvent(element, eventType) {  
  const touch = new Touch({
      ...
  });

  const touchEvent = new TouchEvent(eventType, {
      ...
  });

  element.dispatchEvent(touchEvent);
}

我的测试是这样的:

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({})
})

我的 jest.setup.js 文件是这样的:

$ = require("jquery");
global.$ = $;
global.window.$ = $;

我收到了这个错误:

    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)

我已经尝试模拟 sendTouchEvent 函数,但它不起作用。还尝试使用 rewire mod.__set__ 注入 $

有谁知道如何解决这个问题?

【问题讨论】:

    标签: javascript testing jestjs


    【解决方案1】:

    我发现问题出在 rewire 库上。出于某种原因,它弄乱了窗口的事件。我删除它并更改我的代码以便能够在没有 rewire 的情况下模拟 data 变量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-01-19
      • 1970-01-01
      • 2021-02-26
      • 2020-02-24
      • 1970-01-01
      • 2021-06-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多