jQuery 在尝试使用 Chai 和 Mocha 测试遗留 jQuery 插件时未定义
jQuery is not defined when trying to test legacy jQuery plugin using Chai & Mocha
我正在尝试为旧 jQuery 插件编写单元测试。我是现代 Javascript 环境中的新人。我已经尝试为使用 browserify 在生产中部署的 React 创建单元测试。
遗留 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 插件的情况下,如何测试插件?
您可能需要 jquery 作为“$”并将其作为 "jQuery" 传递给插件。尽管 jquery 应该用两个名称定义,无论如何。
您可以尝试像这样要求 jquery 吗:
let jQuery= require('jquery');
回答2:
实际上,如果您的代码(插件)依赖于 jquery,您的 plugin.js 在加载之前应该需要 jquery..
所以把plugin.js改成
let $ = require('jquery');
// rest of plugin code...
在尝试了几种可能性之后,我可以不使用模块导入,而是使用读取文件并评估脚本内容。
只改
require('../src/plugin.js');
至此
eval(fs.readFileSync(path.join(__dirname, '../src') + '/plugin.js', 'utf8'));
这样我就不用修改遗留文件了。
我正在尝试为旧 jQuery 插件编写单元测试。我是现代 Javascript 环境中的新人。我已经尝试为使用 browserify 在生产中部署的 React 创建单元测试。
遗留 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 插件的情况下,如何测试插件?
您可能需要 jquery 作为“$”并将其作为 "jQuery" 传递给插件。尽管 jquery 应该用两个名称定义,无论如何。 您可以尝试像这样要求 jquery 吗:
let jQuery= require('jquery');
回答2: 实际上,如果您的代码(插件)依赖于 jquery,您的 plugin.js 在加载之前应该需要 jquery..
所以把plugin.js改成
let $ = require('jquery');
// rest of plugin code...
在尝试了几种可能性之后,我可以不使用模块导入,而是使用读取文件并评估脚本内容。
只改
require('../src/plugin.js');
至此
eval(fs.readFileSync(path.join(__dirname, '../src') + '/plugin.js', 'utf8'));
这样我就不用修改遗留文件了。