使用jQuery运行命令行摩卡错误

所以我有这个函数在一个文件中使用jQuery

account.js:

function getSession() { var session = null; $.ajax({ url: "/ajax/get_session", async: false }).done(function(data, textStatus, jqXHR){ session = data; }); return session; } 

我想用Mocha在命令行上testing它。 为此我有另一个文件:

testingaccount.js:

 var assert = require('assert'); var fs = require('fs'); var vm = require('vm'); // includes minified & uglified version, assuming mocha is run in repo root dir var path = '../public/js/account.min.js'; var code = fs.readFileSync(path); vm.runInThisContext(code); describe('getSession', function() { it('should return the empty string because it fails', function () { assert.equal('', getSession()); }); }); 

但是当我在命令行运行mocha时,我得到了错误

1失败

1)getSession应该返回空string,因为它失败了:

ReferenceError:$没有定义

在getSession(evalmachine.:1:34)

在上下文。 (试验/testingaccount.js:19:24)

我是摩卡n00b,所以我不确定正确的方向去解决这个问题。 我尝试添加

 var jqueryLocalPath = 'jquery.min.js'; var jqueryCode = fs.readFileSync(jqueryLocalPath); vm.runInThisContext(jqueryCode); 

之前在test-account.js describe调用没有成功。 然后我试图通过运行Node.js来require

 npm install jquery 

并添加

 var $ = require('jquery'); 

运行mocha之前到test-account.js的顶部。 这也没有工作,我得到同样的错误。 第二种方法还有一个缺点:运行一个新版本的jQuery(2.2.0),我想testing一个(1.11.3)。

我怎样才能使这个testing工作?

我相信答案是使用正确的节点模块进行testing。

 var assert = require('assert'); var fs = require('fs'); var vm = require('vm'); var jsdom = require('mocha-jsdom'); // This is necessary for testing jQuery in Mocha describe('mocha tests', function () { jsdom() before(function () { $ = require('jquery') }); // includes minified & uglified version, assuming mocha is run in repo root dir var path = 'account.js'; var code = fs.readFileSync(path); vm.runInThisContext(code); describe('getSession', function() { it('should return the empty string because it fails', function () { assert.equal('', getSession()); }); }); });