在使用Chai& amp;尝试测试遗留jQuery插件时,没有定义jQuery。摩卡

时间:2017-09-19 09:09:35

标签: javascript jquery unit-testing mocha chai

我正在尝试为旧的jQuery插件编写单元测试。我是现代Javascript环境中的新手。我已经尝试为React创建单元测试,它使用browserify在生产中进行部署。

遗留的jQuery插件文件如下所示

(function($) {
    $.fn.myLegacyPlugin = function() {
        alert('Hello World!');
    };
})(jQuery);

此文件将上传到S3并通过CDN访问。 jQuery将包含在普通的浏览器头标签中。

测试文件如下所示。

let expect = require('chai').expect;
let path = require('path');
let $ = require('jquery');

require('../src/plugin.js');

describe('plugin', () => {
    it('should return okay', () => {
        expect(true).to.be.true; //TODO
    });
});

问题在于,当我尝试执行测试时,跑步者显示jQuery is not defined。如果不修改遗留的jQuery插件,我该如何测试插件?

代码在这里https://github.com/petrabarus/js-test-jquery-legacy

2 个答案:

答案 0 :(得分:0)

在尝试了几种可能性之后,我可以使用读取文件并评估脚本内容,而不是使用模块导入。

仅更改

require('../src/plugin.js');

到这个

eval(fs.readFileSync(path.join(__dirname, '../src') + '/plugin.js', 'utf8'));

这样我就不必修改旧文件了。

答案 1 :(得分:-1)

可能是你要求jquery为“$”并将其作为“jQuery”传递给插件。虽然jquery应该用两个名称定义,不管怎样。 你可以尝试这样的jquery:

let [<Literal>] resPath = __SOURCE_DIRECTORY__ + @"..\packages\MySql.Data.8.0.8-dmr\lib\net452"

答案2: 实际上,如果你的代码(插件)依赖于jquery,你的plugin.js在加载之前应该需要jquery ..

所以将plugin.js改为

let jQuery= require('jquery');