使用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()); }); }); });