繁体   English   中英

尝试使用Chai&Mocha测试旧版jQuery插件时未定义jQuery

[英]jQuery is not defined when trying to test legacy jQuery plugin using Chai & Mocha

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

旧版jQuery插件文件如下所示

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

该文件将被上传到S3并通过CDN访问。 jQuery将包含在常规浏览器的head标签中。

测试文件如下。

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

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

只有改变

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

对此

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

这样,我不必修改旧文件。

可能是您需要将jQuery作为“ $”并将其作为“ jQuery”传递给插件。 尽管jquery应该同时使用两个名称定义。 您可以尝试要求jquery这样吗:

let jQuery= require('jquery');

答案2:实际上,如果您的代码(插件)取决于jquery,则plugin.js在加载之前应要求使用jquery。

因此将plugin.js更改为

let $ = require('jquery');
// rest of plugin code...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM