node.jsでdocument/window依存なスクリプトをグダる
例えばJavaScriptなUIコンポーネントというかなんかを書いて、それをテストする際にはQUnitだとか、操作エミュレーションではSelenium使ったりすると思うのですが。でnode.jsを使ってdocumentやwindowに依存するスクリプトを実行する場合どうするかって話。んまぁ要件により様々だとは思いますけど
でnode.jsのモジュールでjsdomっつーのがあって、それを利用してあーだらこーだらできねーかなーって思って色々やってみた
対象スクリプト (index.js)
(function() {
$("body").append(
$("<div>").text("hoge")
);
$.ajax({
"type": "GET",
"url": "http://localhost:5000",
"success": function(res, status, xhr) {
console.log(xhr.status);
}
});
})();
jQuery及びAjaxを使ってるのも実行出来るようにと
必要なもの
- jquery
- xmlhttprequest
- jsdom
以上は全てnpmでインストール可能
上記のスクリプトをnode.jsで実行するJavaScript
var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
var jsdom = require("jsdom");
var jQuery = require("jquery");
global.document = jsdom.jsdom(
"<html><head><title>hoge</title></head><body></body></html>",
null,
{}
);
global.window = document.createWindow();
global.XMLHttpRequest = XMLHttpRequest;
global.$ = jQuery;
require("./index.js");
console.log(document.title);
console.log($("*").html());
/* 出力結果
hoge
<head></head><body><div>hoge</div></body>
200
*/
という感じ。あとjsdomで色々オプションがある模様(なんかQuerySelectorがあーだらこーだら)