【问题标题】:JQuery via JSDom isn't a functor giving TypeError通过 JSDom 的 JQuery 不是给出 TypeError 的函子
【发布时间】:2015-07-25 23:03:37
【问题描述】:

使用 IO.js 1.3.0,在 Windows 上使用 JSDOM 4.0.1 和 Mocha 2.0.1 和 jquery 2.1.1

以下代码:

 var chai = require('chai');
 var jsdom = require('jsdom');

describe('JSDOM', function () {
var $;

beforeEach(function () {
    global.document = jsdom.jsdom('<html><body><section id="banner"></section></body></html>');
    global.window = global.document.defaultView;
    global.navigator = global.window.navigator;

    $ = global.jQuery = require('jquery')(global.window);
})

it('Using jquery', function () {
    var dom = $("#banner");
});
});

在尝试将 JQuery 选择器用作仿函数(即 $(...))时出现 TypeError: object is not a function 错误。还有其他人遇到这种情况并有解决方法吗?

【问题讨论】:

  • 直到我找到 jquery 没有正确初始化的根本原因(作为必需的模块),我已经将它作为源代码(即通过 fs)并使用 jsdom.env 代替(即 jsdom.env({html: , src: [jquery], done: function(erros, window) { // 这里初始化我的测试用例然后 done(); }});

标签: jquery node.js mocha.js jsdom io.js


【解决方案1】:

问题是您设置了global.windowglobal.document。 jQuery 正在检查那些以确定它是否在浏览器中运行。

这会导致 require('jquery')(global.window) 包裹窗口而不是运行 jquery 工厂函数,就像 $(window) 那样。

【讨论】:

  • 感谢@JoWie,将 global.window 参数移到 jquery 的 require 中,它可以工作。
猜你喜欢
  • 1970-01-01
  • 2022-08-15
  • 2014-10-10
  • 1970-01-01
  • 2015-05-09
  • 2013-08-25
  • 2012-11-29
  • 2017-06-25
  • 2017-09-18
相关资源
最近更新 更多