簡體   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