jQuery没有使用mocha来测试wordpress javascript

jQuery not defined using mocha for testing wordpress javascript

本文关键字:测试 wordpress javascript mocha jQuery      更新时间:2023-09-26

我已经设置了mocha来在终端中运行测试。它适用于像expect(1).to.equal(1)这样的基本测试。我遇到的问题是,我的脚本像jQuery( function( $ ) { // my code here });一样封装在jQuery中,并且在运行测试时出错。

evalmachine.<anonymous>:15
jQuery( function ( $ ) {
^
ReferenceError: jQuery is not defined
at evalmachine.<anonymous>:15:1
at Object.exports.runInThisContext (vm.js:54:17)
at Suite.<anonymous> (/Users/grahamlutz/Documents/BBC/poolproof/test/test.js:21:8)
at context.describe.context.context (/usr/local/lib/node_modules/mocha/lib/interfaces/bdd.js:47:10)
at Object.<anonymous> (/Users/grahamlutz/Documents/BBC/poolproof/test/test.js:8:1)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Module.require (module.js:367:17)
at require (internal/module.js:16:19)
at /usr/local/lib/node_modules/mocha/lib/mocha.js:220:27
at Array.forEach (native)
at Mocha.loadFiles (/usr/local/lib/node_modules/mocha/lib/mocha.js:217:14)
at Mocha.run (/usr/local/lib/node_modules/mocha/lib/mocha.js:469:10)
at Object.<anonymous> (/usr/local/lib/node_modules/mocha/bin/_mocha:404:18)
at Module._compile (module.js:413:34)
at Object.Module._extensions..js (module.js:422:10)
at Module.load (module.js:357:32)
at Function.Module._load (module.js:314:12)
at Function.Module.runMain (module.js:447:10)
at startup (node.js:141:18)
at node.js:933:3

我的test.js看起来是这样的:

var assert = require('assert');
var chai = require('chai');
var expect = chai.expect;
var fs = require('fs');
var vm = require('vm');
var jsdom = require('mocha-jsdom'); 
describe('mocha tests', function () {
jsdom();
before(function () {
    $ = require('jquery');
});
var path = __dirname + '/../wp-content/themes/bb-theme-child/myscript.js';
var code = fs.readFileSync(path);
vm.runInThisContext(code);
describe('getSession', function() {
    it('should return the empty string because it fails', function () {
        applyCoupon();
    });
});
});

我的问题是,为什么jQuery没有定义,或者我做出了什么不正确的假设?我需要改变在wordpress设置中测试javascript的方式吗?

下面两行对我很有用。为了方便起见,我只是把它们放在我的mocha测试文件的顶部。根据mocha jsdom github自述文件中的建议,我使用了"jsdom global"包,而不是"mocha jsdom"。https://github.com/rstacruz/jsdom-global

this.jsdom = require('jsdom-global')()
global.$ = global.jQuery = require('jquery');

您必须自己将$jQuery导出到全局空间:

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

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