所以我有这个在文件中使用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.jstest-account.js
require
并添加
npm install jquery
在运行var $ = require('jquery');
之前,到test-account.js
的顶部。这也没有用,我得到了同样的错误。第二种方法的另一个缺点就是运行一个更新版本的jQuery(2.2.0),我想要测试它(1.11.3)。
如何使此测试工作?
答案 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());
});
});
});