2012/04/16
jQueryMobile+iPhone で QUnit を使う。
jQuery Monile 1.1.0 に対応した JQMDP-1.0rc2 を googlecode に置きました。
本題。
JavaScriptのテストコードってどうすれば良いかと調べると QUnit って言うのが見付かった。
特殊なのは JavaScript はスレッドが使えないので非同期処理をするための 仕掛けが用意されている事くらい。
参考サイトは非常に良くまとめてくれるいるので先に参照して欲しい。 で、現実的なテストの場合、アプリとテストコードは分離したいので 別Window(又は iframe)でテストアプリを起動してやる必要がある。
参考サイトにはこの辺の解説が無かったので自分で調べてみた。 本家サイトのデモを見ると基本系はこんな感じだがmodule("Module name");
test("test1", function() {
equal( true, true, "passing test" );
});
test("test2", function() {
equal( true, false, "failing test" );
});
module()関数の第2引数にオプションを指定すると開始と終了をフックできる。
module("Module name", {
setup: function(){ 開始処理 },
teardown: function{ 終了処理 }
});
test("test1", function() {
// ここで this は module()第2引数になる。
});
なのでおおざっぱに考えると
var Sandbox = function(url){
this.url = url;
this.win = null;
this.onload = [];
this.autoClose = true;
}
Sandbox.prototype = {
setup: function() {
var self = this;
this.win = window.open(this.url, "_blank");
this._onload = function(){
var $handle = $(self.win.document);
for (var i=0; i
IEは別 Window の onload が取れないのでしかたなくポーリングにした。
IEいらないなら this.win.onload = function(){...} で良いはず。
Sandbox.load()で設定したコールバックが別Windowの onload で呼ばれるので、
引数の $sandbox (別Windowの$(document))から値を引っ張り出してチェックすれば良い。
PC の Chrome, IE, Safari で動作が確認できた。
が、残念ながら iPhone では動かなかったので iframe に変更してみた。$(function(){
$(document.body).append($(""));
})
var Sandbox = function(url){
this.url = url;
this.win = null;
this.onload = [];
this.autoClose = true;
}
Sandbox.prototype = {
setup: function() {
var self = this;
var ifr = document.getElementById("sandbox");
this.win = ifr.contentWindow;
function onload(){
var $handle = $(self.win.document);
for (var i=0; i
iframe だとちゃんと iPhone でも QUnit が動いた。(iOS5、他未確認)
- http://code.google.com/p/jqmdp/downloads/list
本題。
JavaScriptのテストコードってどうすれば良いかと調べると QUnit って言うのが見付かった。
- 本家:http://docs.jquery.com/Qunit
- 参考:http://d.hatena.ne.jp/Jxck/20100721/1279681676
特殊なのは JavaScript はスレッドが使えないので非同期処理をするための 仕掛けが用意されている事くらい。
参考サイトは非常に良くまとめてくれるいるので先に参照して欲しい。 で、現実的なテストの場合、アプリとテストコードは分離したいので 別Window(又は iframe)でテストアプリを起動してやる必要がある。
参考サイトにはこの辺の解説が無かったので自分で調べてみた。 本家サイトのデモを見ると基本系はこんな感じだが
- setup() で window.open("アプリURL");
- onload でテスト起動
- teardown() で window.close();
が、残念ながら iPhone では動かなかったので iframe に変更してみた。
この投稿へのコメント

コメント・フォーム