使用jQuery运行命令行Mocha时出错

时间:2016-01-28 17:07:43

标签: jquery node.js mocha

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

account.js:

// ... //

我希望使用Mocha在命令行上测试它。为此,我有另一个文件:

测试account.js:

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

但是当我在命令行上运行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()); }); }); 时,我收到了错误

  

1失败

     

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

     

ReferenceError:$未定义

     

在getSession(evalmachine。:1:34)

     

在Context。 (试验/测试account.js:19:24)

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

mocha
var jqueryLocalPath = 'jquery.min.js'; var jqueryCode = fs.readFileSync(jqueryLocalPath); vm.runInThisContext(jqueryCode); describe之前调用

但没有成功。然后,我通过运行

尝试通过Node.js test-account.js
require

并添加

npm install jquery
在运行var $ = require('jquery'); 之前,

test-account.js的顶部。这也没有用,我得到了同样的错误。第二种方法的另一个缺点就是运行一个更新版本的jQuery(2.2.0),我想要测试它(1.11.3)。

如何使此测试工作?

1 个答案:

答案 0 :(得分:3)

I believe the answer is to use the correct Node modules, for 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());
        });
    });
});