マルチスレッドでいうところの「待ち合わせ」が必要なのです。Deferredの中のキューをのぞき見て、非同期のリクエストがすべて完了したことを見計らってテストから抜けてもらわないといけないのですが、ユーザ側でなんと化しようとするとyieldとかが無いとたぶん無理でそれはJSの標準にはありません。もしくはJSSpecになんらかのpatchを当てて待ち合わせるように書き直す必要があるのです。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ko"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8" /> <title>jsboard.jy JSSpec results</title> <link rel="stylesheet" type="text/css" href="../JSSpec/JSSpec.css" /> <script type="text/javascript" src="../JSSpec/diff_match_patch.js"></script> <script type="text/javascript" src="../JSSpec/JSSpec.js"></script> <script type="text/javascript" src="http://www.google.com/jsapi"></script> <script type="text/javascript">// <![CDATA[ google.load("jquery", "1.4.0"); // ]]></script> <script type="text/javascript" src="../jsdeferred/jsdeferred.jquery.js"></script> <script type="text/javascript">// <![CDATA[ describe('async', { 'before': function() { target = {}; }, 'テスト' : function (){ var x = 0; var d = Deferred.define(); d.next(function (){ x =1; }) .wait(1000) .next(function(){ value_of(x).should_be(1); value_of(x).should_be(0); }); } }); // ]]></script> </head> <body><div style="display:none;"><p>A</p><p>B</p></div></body> </html>
0 件のコメント:
コメントを投稿