0

単体テストの正しい構文は何ですか?

ブラウザで開くと、次のように動作します。その意図は、入力ボックスibが変更されるたびにその内容を読み取り、その解釈された値を表のセルに書き込むことc5です...

var c5 = document.createElement('td');

var ib = document.createElement('input');
// For all browsers except IE before Version 9 -see http://help.dottoro.com/ljeuqqoq.php
if (ib.addEventListener)
    {
    ib.addEventListener('change', Action01InputBox (ib, c5), false);
    }
// For IE before Version 9 -see http://help.dottoro.com/ljeuqqoq.php
    else {
        if (ib.attachEvent){
        ib.addEventListener('change', Action01InputBox (ib, c5), false);
        }
    }

これがイベントリスナーです。もちろん、関数を返します。

NB関数EmptyNode(c5)は、ターゲットノードのすべてのコンテンツを単純に削除しRealNumberFromInput (ib.value)、正規表現を介して入力文字列から実数を取得します...

function Action01InputBox (ib, c5)
{
    return function ()
    {
        EmptyNode(c5);
        var r = RealNumberFromInput (ib.value);
        c5.appendChild(document.createTextNode(r));
    };
};

これが単体テストです...

Action01InputBoxTest = TestCase("Action01InputBoxTest");

Action01InputBoxTest.prototype.test01 = function()
{   
    // Text box
    var r = 0.123;
    var ib = document.createElement('input');
    ib.setAttribute('value', document.createTextNode(r));

    // Target cell
    var c5 = document.createElement('td');
    c5.appendChild(document.createTextNode("Bogus"));

    // Do action
    Action01InputBox(ib, c5);
    assertEquals(c5.textContent, r);    
};

textContentofc5は "Bogus" から "0.123" に変更されているはずなので、テストは失敗します。

正しく理解すれば、問題はテストが関数ではなくイベントリスナーの戻り値を呼び出すことですが、テストから関数を適切に呼び出す方法がわかりません。

前もって感謝します。

4

1 に答える 1