2012-03-22 7 views
0

私はこの関数のユニットテストを書く必要があるので、CSSプロパティの変更を見るためにsetInterval()メソッドを使用する関数を持っています。setTimeoutは関数を起動しません

var counter = 0; 
function callback() { 
    counter++; 
} 
$('body').append('<div id="testDom" style="color:red"/>'); 
dom = $('#testDom').get(0); 
watcherId = DomWatcher.watch(dom, 'color', $.proxy(callback,this)); 
function testWatch() { 
    $(dom).css('color', 'green'); 
    setTimeout(assertEqual(counter, 1), 1000); 
} 

アサーションは失敗します。 時計の機能がうまく動作していることを確認しています.CSSのプロパティが100msごとに変わるのを確認します。ユニットテストを書くための良い方法を考え出してください。

答えて

3

assertEqualをすぐに呼び出して、戻り値をsetTimeoutに渡しています。あなたはsetTimeoutに関数を渡す必要があります。

function assert() { 
    assertEqual(counter, 1); 
} 
setTimeout(assert, 1000); 
1

あなたはあなたの目のオプションは、より良いくらいです

setTimeout("assertEqual(counter, 1)", 1000); 

または

setTimeout(function(){assertEqual(counter, 1);}, 1000); 
+3

を行う必要があります。 – jfriend00

+0

はい、両方を知っている方が良いですが、2番目を使用してください。 – Narek

+0

したがって、順序を逆にして、 'eval'オプションは非推奨です... – gdoron

関連する問題