node.jsでdocument/window依存なスクリプトをグダる

2013-01-13T00:00:00+00:00 JavaScript Node.js

例えば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があーだらこーだら)

node.jsでdocument/window依存なスクリプトをグダる (2) PHPの.user.ini