Test::QUnit - mozreplçµç±ã§ã³ãã³ãã©ã¤ã³ããJavaScriptã®ãã¹ããå®è¡ãã
ãã¯ã© - JavaScriptã®ãã¹ãã«ã¤ãã¦
ãã¹ãã®ãªãã³ã¼ãã¯ã³ã¼ãã§ã¯ãªãããã¹ããæ¸ããªãããã°ã©ãã¯ããã°ã©ãã§ã¯ãªãããã¹ãã£ã³ã°ãã¬ã¼ã ã¯ã¼ã¯ã®ãªãè¨èªã¯è¨èªã¨å¼ã¶ã«å¤ããªããã¨ä»¥ä¸ã®ãããªåãããªãã¨ãè¨ãè³æ ¼ã¯å ¨ããªããçä¿¡çã§ããªãåã§ãããå°ãªãã¨ãã¾ã¨ãã«åãã³ã¼ãã§ãããã¨ã証æããããã«ã人並ã¿ã«ã¯ãã¹ããæ¸ãã¾ãã
ããã§ã¾ããæè¿JavaScriptã°ããæ¸ãã¦ãã®ã§ãããJavaScriptã®ãã¹ãã£ã³ã°ãã¬ã¼ã ã¯ã¼ã¯ã£ã¦å¤§ä½ä»¥ä¸ã®ãããªãã®ã«åãããã¨æã£ã¦ãã¾ãã
- ãã©ã¦ã¶ä¸ã§åãããã¨ãåæã¨ãããã®(JsUnit, QUnitãªã©)
- RhinoãSpiderMonkeyãªã©ããã©ã¦ã¶ããç¬ç«ããJavaScriptã¨ã³ã¸ã³ã§å®è¡ãããã¨ãåæã¨ãããã®(JsUnit, QUnit-TAPãªã©)
- 2. ã«å ããenv.js(http://www.envjs.com/)ãªã©ãå©ç¨ãã¦ãµã¼ããµã¤ãJavaScriptã¨ã³ã¸ã³ä¸ã§ãã©ã¦ã¶ãã¨ãã¥ã¬ã¼ããããã¼ã«ã«ã§ã¯ã©ã¤ã¢ã³ããµã¤ãJSã®ãã¹ããå®ç¾å¯è½ã«ãããã®(Jasmineãªã©)
ã¡ãªã¿ã«JsUnitãäºåããã¾ãããå®ã¯JsUnitã¨åã®ã¤ãJSç¨ã®ãã¹ãã£ã³ã°ãã¬ã¼ã ã¯ã¼ã¯ã£ã¦äºã¤ãã£ã¦ãå²ã¨æåã§Hudsonç¨ã®ãã©ã°ã¤ã³ããã£ããããã®ã1.ã®JsUnit(http://www.jsunit.net/)ã§ããã¤ãã¼ã¨ãããããããShindigã®JSã®ãã¹ãç¨ã«ä½¿ããã¦ãã®ããè¦ããã¨ãªãã«ãé¢ãããmavenã®pluginããã£ããããã®ã2.ã®JsUnit(http://jsunit.berlios.de/)ã§ãã
ãã§ãããããæ¯è¼ãã¦ããã¨ãã¾ã1. ã¯ã¯ã©ã¤ã¢ã³ããµã¤ãJSããã¹ãããä¸ã§æãç´ ç´ãªæ¹æ³ãªã®ã§ãããããããããã¹ãã®ããã«ãã©ã¦ã¶ã§ç¹å®ã®URLãå©ããªããã°ãããªãã®ãé¢åã§ãããã¹ãã¨ããã®ã¯ã³ãã³ãä¸çºã§å©ãããããããã¯IDEããããã£ã¨ãªãã§ã¾ã¨ãã¦å®è¡ã§ããªãã¨èããããæ°ã®ä¸ãããã®ã§ãã
次ã«2.ã§ãããããã¯ç°å¢éä¾åãªJSãã¤ã¾ãã¯ã©ã¤ã¢ã³ããµã¤ãã§ãããã¨ãµã¼ããµã¤ãã§ãããã¨é¢ä¿ãªãåãé¡ã®ã©ã¤ãã©ãªçãªãã®ã§ããã°åé¡ãªããã¹ãã§ãã¾ãããããã¡ãã£ã¨ã§ãã¯ã©ã¤ã¢ã³ããµã¤ãJSç¹æã®ãã®ï¼windowã¨ãï¼ããã¹ãã®ä¸ã§å¿ è¦ã«ãªã£ã¦ããã¨ã¢ã¦ãã§ãèªåã§é å¼µã£ã¦ã¨ãã¥ã¬ã¼ããããããããã¯ã¯ã©ã¤ã¢ã³ããµã¤ãã絡ãã§ãããã®ã ãå¥ã®ãã¹ãã£ã³ã°ãã¬ã¼ã ã¯ã¼ã¯ã«é ¼ãï¼ï¼ï¼ãã¨ã«ãªã£ã¦ãã¾ãã¾ãã
å人çã«ä»å¾ã®å¯è½æ§ãããã®ã3. ããªãã¨æã£ã¦ããã®ã§ãããJasmine試ãããã¨ãªãã®ã§åããã¾ããããã®ãã¡è©¦ãããã§ãããã®ææ³ãã¨ããã¹ãã£ã³ã°ãã¬ã¼ã ã¯ã¼ã¯ã®å©ä¾¿æ§ã¯ã¤ã¾ãã¨ããããã©ã¦ã¶ã®ã¨ãã¥ã¬ã¼ã·ã§ã³ã®ç²¾åº¦æ¬¡ç¬¬ã ã¨æãã¾ããã¯ã©ã¤ã¢ã³ããµã¤ãJSã®æè¡ãé²ã¿ãããã§ã®ãã©ã¦ã¶å é¨ã®ã¨ãã¥ã¼ã¬ã·ã§ã³ãé²ãã æã«ã¯ãã¹ããªé¸æè¢ã«æãå¾ãã®ã§ã¯ãªãããªããã¨åæã«æã£ã¦ãã¾ãã(Jasmineã«ã¤ãã¦ã¯ããã¾ãåãã£ã¦ããªãã®ã§ããã³ãæè¿ã§ãï¼
mozreplã¨ããããªä»²éãã¡
ã¡ãã£ã¨è©±ãå¤ããã¾ãããFirefoxã«ã¯mozrepl(http://wiki.github.com/bard/mozrepl/)ã¨ããã¢ããªã³ããã£ã¦ããããFirefoxã«ã¤ã³ã¹ãã¼ã«ããä¸ã§åä½ãããã¨ãèµ·åãã¦ããFirefoxã«port 4242ã§telnetæ¥ç¶ã§ããããã«ãªãã¾ããæ¥ç¶ããå¾ã¯å¯¾è©±çã·ã§ã«ã§Firefoxã®ä¸ãæ¢æ¤ãããã ä»»æã®JavaScriptã³ã¼ããå®è¡ãã¦éã¶ãã¨ãã§ãã¾ããã¡ãªã¿ã«mozreplã®ã·ã§ã«ã¯æ±ãã«ããã®ã§ã
rlwrap telnet localhost 4242
ã®ããã«rlwrapã§ã©ãããã¦ãããã¨ä½¿ãããããªãã¾ãã
mozreplã使ããã¨JSã®ãããã°ãªã©ä¸ã å½¹ã«ç«ã¤ã®ã§ããããã¯ãFirefoxã®ä¸èº«ãæ¬æ ¼çã«ããããã¾ããããï¼ã¨ãªãã¨å¯¾è©±çã·ã§ã«ã§ã¯éçãããã¾ããããã°ã©ã ããmozreplãæä½ã§ããã¨ããã®ã«ãªããã¨ãããããããã©ã¤ãã©ãªã£ã¦ãªãã®ï¼ã¨æã£ã¦æ¤ç´¢ãã¦ã¿ããããã¾ããã
MozRepl - http://search.cpan.org/~zigorou/MozRepl/
ãªãã ããã©ããã§è¦ããã¨ã®ãã人ãAuthorã§ããï¼
ããã使ãã¨Perlçµç±ã§ä»¥ä¸ã®ããã«JavaScriptã®ã³ã¼ããå®è¡ã§ãã¾ãã
use MozRepl; my $repl = MozRepl->new; $repl->setup; $repl->execute("alert('Fuck You!')");
ãªãã ãã¨ã£ã¦ãå¤æ
çãªæ¥½ããæ°åã«ãªã£ã¦ãã¾ãããã
ããã ãã§ãçµæ§è²ã
ãªãã¨ãåºæ¥ããã§ãããMozReplãå
ã«ããã«å¤æ
çãªä¾¿å©ãªä½¿ãæ¹ãåºæ¥ãããã«ããã®ãMozRepl::RemoteObject(http://search.cpan.org/dist/MozRepl-RemoteObject/lib/MozRepl/RemoteObject.pm)ã§ãã
ããã使ãã¨ãJavaScriptã®æãè©ä¾¡ãã¦ããã®çµæã®JSãªãã¸ã§ã¯ããç価ãªPerlã®ãªãã¸ã§ã¯ãï¼ç¡è«ãã®ã¾ã¾å¤æããã¦ããããã§ã¯ãªãï¼ã¨ãã¦ããªãééçã«æ±ããã¨ãå¯è½ã«ãªãã¾ããç価ã¨ééãããã¦ããããã§ã¯ãªãã§ããä¾ãã°ã以ä¸ã®ãããªç°¡åãªã³ã¼ãã§JSãªãã¸ã§ã¯ãã®ããããã£ã表示ã§ãã¾ãã
use MozRepl; use MozRepl::RemoteObject; my $repl = MozRepl->new; my $bridge = MozRepl::RemoteObject->install_bridge($repl); my $jsobj = $bridge->expr(<<'JS'); (function getPoint() { return { x: 200, y: 100 }; })(); JS print $jsobj->{x}; # => 200 print $jsobj->{y}; # => 100
MozRepl::RemoteObjectã使ãã¨ãcpanã®SYNOPSYSã«ãããããã«$tab->{linkedBrowser}->{contentWindow}->{document}->{body}ã®ããã«JSã®ãªãã¸ã§ã¯ããPerlããæç¹°ã£ã¦ãã£ãããPerlããJSã®é¢æ°ã$tab->{linkedBrowser}->{contentWindow}->alert();ã®ããã«å®è¡ã§ããããã¦é¢ç½ãã®ã§ãæ¯é試ãã¦ã¿ã¦ãã ããã
Test::QUnit - Yet Another QUnit Testing Framework
以ä¸ã®ãã¨ãè¸ã¾ãã¦ã
- QUnitã§æ¸ããããã¹ãã
- ã³ãã³ãã©ã¤ã³ä¸ããä¸çºã§(Perlã®å ´åã¯proveã§ãã)
- ãã¤æ¬ç©ã®ãã©ã¦ã¶ä¸ã§åãã®ã§ç´°ãããã¨ã¯æ°ã«ãã
å®è¡ã§ãããã¹ãã£ã³ã°ãã¬ã¼ã ã¯ã¼ã¯ï¼ãã¬ã¼ã ã¯ã¼ã¯ã¨å¼ã¹ãã»ã©å¤§ããæ©è½ãªããã©ãªãã¨ãªãã«ãã³ããã®ã§ï¼ãä½ã£ã¦ã¿ã¾ãããç¾å¨ã¯githubä¸ã«ã®ã¿ç½®ãã¦ããã¾ãã
http://github.com/zentooo/p5-test-qunit
æ¸ãæ¹ã¯ãããªã«ã³ã¸ã§ãã
use strict; use warnings; use Test::More; use Test::QUnit; inject_select_window_function("function(window) { return window.parent !== window; }"); qunit_ok('http://path/to/qunit/test.html', 'qunit sample'); done_testing;
åºæ¬çã«ã¯qunit_ok({ãã¹ããããQUnitãã¹ãã®URL}, {ãã¹ãã®èª¬æ}); ããã ãã§ãããããå®è¡ããã¨ã å½è©²URLã®QUnitãã¹ãã®çµæãTAPå½¢å¼ã«å¤æãããä¸ã§åãåºããã¾ããå é¨çã«ã¯ã{ãã¹ãã®èª¬æ}ã第ä¸å¼æ°ã¨ããsubtestã«ãªã£ã¦ãã¾ãããªã®ã§æ°ããã®Test::Moreãå¿ é ã§ãã
以ä¸ã®ãããªãã¹ããt/以ä¸ã«ç½®ããä¸ã§proveãã¦ããã¨ãQUnitãã¹ããã¬ã¬ã¬ã¬ã£ã¨å®è¡ããã¾ãããªãããããã¬ãã«ã§ã¯ãªãï¼iframeã¨ãï¼ã¦ã£ã³ãã¦ä¸ã§QUnitãã¹ããå®è¡ãã¦ããå ´åããããã¨æããinject_select_window_functionã¨ããé¢æ°ã«ãwindowãªãã¸ã§ã¯ããå¼æ°ã«åããã¹ããå®è¡ãããwindowãªãtrue, ããã§ãªãå ´åfalseãè¿ããããªç¡åé¢æ°ããæããã¨æå®ããwindowã§ãã¹ããåºæ¥ãããã«ãã¦ããã¾ããä¸ã®ä¾ã ã¨ãtopã¬ãã«ã§ãªãwindowãé¸æãã¦ãã¾ããç»é¢ä¸ã«iframeãä¸ã¤ã ããããããã§QUnitã®ãã¹ããå®è¡ããå ´åã¯ããã§ãã ãã¶ãã§ãã
å é¨ã§ã¯ã以ä¸ã®ãããªãã¨ããã¦ãã¾ãã
- addEventListenerã§windowã®loadã¤ãã³ãçºç«æã«QUnitãªãã¸ã§ã¯ãã®logã¡ã½ãã, doneã¡ã½ãããæ¸ãæããããã«æå®ãlogã¡ã½ããã¯1ãã¹ãå®è¡ãã¨ã«å¼ã°ããdoneã¡ã½ããã¯ãã¹ãå ¨ã¦ãçµäºããæã«å¼ã°ãã
- logã¡ã½ããå é¨ã§ã¯åãåã£ãããã¹ãã®æå¦ãã¨ããã¹ãã¡ãã»ã¼ã¸ããå«ãJSãªãã¸ã§ã¯ããé åã«çªã£è¾¼ã
- doneã¡ã½ããå é¨ã§ã¯çµäºãã©ã°ãç«ã¦ã
- QUnitãã¹ããå®è¡ããçµäºãã©ã°ãç«ã¤ã¾ã§å¾ ã£ã¦ããMozRepl::RemoteObjectçµç±ã§ãã¹ãçµæã®é åãåãåºããTAPå½¢å¼ã«å¤æãã¦åºåãããã¦å¾å§æ«ã
QUnitã«logãdoneãªã©ããã¯ç¨ã®é¢æ°ãäºãç¨æãã¦ãã£ãããããåºæ¥ããã¨ã ãã©ãä»ã®ãã¹ãã£ã³ã°ãã¬ã¼ã ã¯ã¼ã¯ã«é¢ãã¦ãåããããªé¢æ°ããããã°çè«ä¸åããã¨ãã§ããã¯ãã
ç¾å¨ã¯ããã©ã«ãã§ä¸è¨ã®MozReplã¨MozRepl::RemoteObjectãå©ç¨ããTest::QUnit::Bridge::MozReplã使ãããã«ãªã£ã¦ãããã©ãããã¯ä¸å¿Test::QUnit::Bridgeãç¶æ¿ãã¦3ã¤ãããã®ã¡ã½ããããªã¼ãã©ã¤ãããã¯ã©ã¹ãä½ãã°å®è£ ãåãæ¿ããããããã«ãªã£ã¦ããã試ãã¦ããªãã®ã§ããã®åãæ¿ãé¨åãã¡ããã¨åããã¯æªç¢ºå®ã
chromerepl(http://github.com/kzys/chromerepl)çµç±ã§Chromeã§ããã¹ãããããã®Bridgeã«é¢ãã¦ã¯ãã®ãã¡æ°ãåãããããã»ã¹ééä¿¡ã®ç·´ç¿ãã¦ãã¤ãããããããªããã©ãIEã¨ãã¯ãã¾ãã誰ããä½ã£ã¦ãããã¨ã¿ããªå¹¸ãã«ãªãããããããªãã§ããã丸æãã§ããã
çµ
Test::QUnitã®ãQUnitã®logãmozreplã§ä¹ã£ã¨ãã°ããããããï¼ãã¨ããã¡ã¤ã³ã¢ã¤ãã£ã¢ã¯id:ZIGOROuããã«é ãã¾ãããæè¬æè¬ã
å®è£ çã«ã¯ã¾ã ã¾ã ã¤ã±ã¦ãªãç¹ãå¤ãã§ãããJSã®ãã¹ãã§å°ã£ã¦ãã人ã¯ä½¿ã£ã¦ã¿ãã¨å¤å°å¹¸ãã«ãªããããããã¾ãããEnjoy testing!