javascript - 在 mocha-jsdom 中使用 jQuery 时如何修复 "ReferenceError: $ is not defined"?

标签 javascript unit-testing ecmascript-6 mocha.js chai

我正在我的项目中设置 ES6 单元测试,但在使它们与库一起使用时遇到一些问题。我想我应该使用 jQuery 作为一个测试来尝试让它工作。没有库,测试就可以工作。

请注意,jQuery 已导入到我的 main.js 文件中,因此它在整个项目中都可用。

我的 JS 文件如下所示:

class Test {
  constructor(options) {
    this.init();
  }

  init() {
    $('.test-div').addClass('test');
  }

  sayHello() {
    return 'hello world!';
  }
}

export default Test;

测试如下所示:

import jsdom from 'mocha-jsdom';
import chai from 'chai';
import Test from './test';

chai.should();

describe('Frequency', () => {

  var $;
  jsdom();

  before(() => {
    $ = require('jquery');
  })

  it('should output hello world', () => {
      const test = new Test();
      test.sayHello().should.equal('hello world!');
  });

});

如果我删除 init() 函数,则测试有效。但是,之前的函数似乎没有导入 jQuery 进行测试。我在控制台中收到的错误如下:

ReferenceError: $ is not defined
  at Frequency.init

最佳答案

我复制了您的代码,并将 before Hook 修改为:

before(() => {
  $ = require('jquery');
  global.$ = $;
});

如果您阅读mocha-jsdom的文档中,您会看到它放入了全局空间符号,例如 windowdocument。当您加载 jquery 时,它会找到 window 并将其自身添加为 window.$。在浏览器中,这使$在全局空间中可见,因为window全局空间。然而,在 Node 中,全局空间是 global,因此您必须自己将 $ 放入其中。

关于javascript - 在 mocha-jsdom 中使用 jQuery 时如何修复 "ReferenceError: $ is not defined"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38309405/

相关文章:

javascript - 使用 process.hrtime() 的执行时间返回 vaSTLy 不同的结果

javascript - React 组件中未定义的某些对象属性

javascript - 如何转换变化的数据以在 chart.js 中可视化

Javascript ReactJs 可以将多个组件作为组导入吗?

javascript - 在单独的对象中使用reduce进行对象解构

java - 我需要为 Jersey Rest Web 服务编写 Junit 测试用例..请帮助我或发布示例代码?

java - 单元测试: how to verify that an argument was passed to a constructor?

java - Spring MVC : Testing particular annotated method gets invoked

javascript - 带有 ES6 的 jQuery ajaxSetup

javascript - Three.js 中 Material 的漫反射贴图和颜色之间的相关性