私はMochaユニットテストを書いていますTypeScriptコードを含むJquery。ドキュメントオブジェクトの取得にjsdomを使用しています。 TSコードをJSにコンパイルしてテストを実行すると、エラーがスローされます[ReferenceError:$ is not defined]。
私のTypeScriptコードはここにあります
export function hello(element) : void {
$(element).toggleClass('abc');
};
私のユニットテストコードは次のとおりです。
import {hello} from '../src/dummy';
var expect = require('chai').expect;
var jsdom = require('jsdom');
var document = jsdom.jsdom();
var window = document.defaultView;
var $ = require('jquery')(window);
describe('TEST NAME', () => {
it('should run', (done) => {
hello($('div'));
done();
});
});
Mochaテストを実行すると、次のように表示されます。
<failure message="$ is not defined"><![CDATA[ReferenceError: $ is not defined ...
]]></failure>
global。$ = require( "jquery");も使用してみましたが、機能しません。
スクリプトはグローバルスペースからjQueryを取得するため、jQueryはグローバルに使用可能である必要があります。 var $ = require('jquery')(window);
が次のように置き換えられるようにコードを変更した場合:
global.$ = require('jquery')(window);
その後、それは動作します。 2つの呼び出しに注意してください。最初にjquery
を要求し、次にwindow
を渡してビルドします。または、次のことを行うこともできます。
global.window = window
global.$ = require('jquery');
window
がグローバルに利用可能な場合、最初のスニペットのように二重呼び出しを実行する必要はありません。jQueryはグローバルに利用可能なwindow
を使用するだけです。
一部のスクリプトはその存在を信頼しているため、おそらくglobal.jQuery
も定義する必要があります。
実行されるテストファイルの完全な例を次に示します。
/// <reference path="../typings/mocha/mocha.d.ts" />
/// <reference path="../typings/chai/chai.d.ts" />
/// <reference path="../typings/jsdom/jsdom.d.ts" />
/// <reference path="./global.d.ts" />
import {hello} from './dummy';
import chai = require('chai');
var expect = chai.expect;
import jsdom = require('jsdom');
var document = jsdom.jsdom("");
var window = document.defaultView;
global.window = window
global.$ = require('jquery');
describe('TEST NAME', () => {
it('should run', (done) => {
hello($('div'));
done();
});
});
typings
ファイルは、tsd
を使用して通常の方法で取得されます。ファイル./global.d.ts
は、global
に新しい値を設定するときに発生する可能性のある問題を修正します。を含む:
declare namespace NodeJS {
interface Global {
window: any;
$: any;
}
}
dummy.js
も次のように変更されました。
declare var $: any;
export function hello(element) : void {
$(element).toggleClass('abc');
};
JsdomとjQueryをNode最初に:
npm install jsdom --save-dev
npm install jquery --save-dev
次に、jQueryを使用している.jsファイルにこの行を追加します
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = new JSDOM(`...`);
var jQuery = require('jquery')(window);
var example = (function($) {
.....your jQuery code....
})(jQuery);
module.exports = example;
グローバル名前空間タイプ定義を変更できない、または変更したくない場合でも、次のようにjQueryを含めることができます。
const globalAny:any = global;
const $ = globalAny.$ = require('jquery')(window);
JQueryの完全な初期化は次のようになります。
const jsdom = require("jsdom");
const { JSDOM } = jsdom;
const { window } = (new JSDOM());
const globalAny:any = global;
const $ = globalAny.$ = require('jquery')(window);