宣伝。日経LinuxにてLinuxの基礎?を紹介する漫画「シス管系女子」を連載させていただいています。 以下の特設サイトにて、単行本まんがでわかるLinux シス管系女子の試し読みが可能!
MozLabの一機能の単体テスト用ツールMozUnitではasync型のテストケースを書くことができる、というのは前にここでも書いたんだけど、使い勝手の悪いポイント?が一つある。それは、テストケースの中で、ある処理が終わってから次の処理に進むといったことが簡単にはできないこと。
現状の仕様では、
という書き方しかできなくて、各テストケースの中でコールバック関数を使って準備が整うのを待つという使い方はできない。一般的な意味での単体テストというのがどうある「べき」なのかは知らないけど、やりたいこととしては、
の方が便利ですよね? ね?
んでscript.aculo.usのユニットテストの機能ではwaitという機能を使って処理待ちができるそうだから、MozUnitステでscript.aculo.usを拡張機能の開発でも使えるようにせよ!という指令が須藤さんから下ったのだけれども。
なんか仕様があちこち違うから今までMozLabベースで作ってた物をこれ用にするにはscript.aculo.usのソースもガッツリ読まなきゃいけないっぽいし、どうもscript.aculo.usは複数のテストが同時に動くことを想定していなさそうな雰囲気だったので、MozReplみたいな機能を使って同時に複数人でテストするようなことは難しいっぽかった(そんな事ほんとにやるのかどうかはさておき)ので、新しいこと覚えるよりは今までの知識がそのまま使えた方が僕が楽だと思った。
ということでMozUnitのTescCaseクラスの定義をゴニョゴニョと書き換えて、JavaScript 1.7のジェネレータを応用し、テストケースの中で yield 5000;
とか書くとそこで指定時間(ここでは5000ミリ秒=5秒)待ってから次の処理に進むということができるようにしてみた。テストケースの実行結果の返り値を見て、 [object Generator]
である場合は、StopIteration例外が出るまでタイマー使って何度もnext()
を実行して、それが済んでから次に処理を進めるようにした次第です。
……ということなんだけど、yieldってこんな使い方しちゃっていいのかしらん? yield(生産)って書いてるのに何も生産しとらんし。
「清算」じゃなくて「譲る」方だと思う。
関数を途中で止めて親環境に処理を「譲る」のが yield だと思うので、正解じゃないですか?
なるほど。そういう意味もあったんですね。
「ジェネレータ関数」とかなんとかいう言葉から、てっきり、「生産」の方の意味だけだと思い込んでました。
JavaScript/1.7 の話なので Firefox 限定です。以前、 ...
の末尾に2020年11月30日時点の日本の首相のファミリーネーム(ローマ字で回答)を繋げて下さい。例えば「noda」なら、「2007-02-16_yield.trackbacknoda」です。これは機械的なトラックバックスパムを防止するための措置です。
writeback message: Ready to post a comment.