1

私はよく JavaScript 関数の出力を手動でテストします (コンソールで各関数の出力を確認するだけです)。JavaScript では、一連の関数呼び出しの出力を自動的にテストし、期待される結果を生成しなかったすべてのテストを返す方法はありますか?

checkOutput([["add(1, 2)", 3], ["add(2, 2)", 4]]); //if the input does not match the output in one of these arrays, then return the function call(s) that didn't produce the correct output

function checkOutput(functionArray){
    //this function is not yet implemented, and should return a list of function calls that did not produce correct output (if there are any).
}

function add(num1, num2){
    return num1 + num2;
}
4

5 に答える 5

2

絶対。QUnitなどの単体テスト スイートを使用します。

私は特にこれが好きで、さまざまな jQuery プロジェクトで使用されていることを誇っています。それはかなりの確固たる支持です。

典型的なテストは次のようになります...

test( "add test", function(num1, num2) {
  ok( num1 + num2 == 42, "Passed!" );
});

そして、その提案が気に入らない場合は、古き良き Wikipedia: JavaScript Unit Testing Frameworksで他の単体テスト フレームワークを確認してください。

于 2013-01-16T06:41:27.987 に答える
2

eval各配列の最初の要素をループして、2 番目の要素と比較するのと同じくらい簡単に思えます。

function checkOutput(functionArray) {
    var check = function(e) {
        return eval(e[0]) !== e[1];
    };
    if( Array.prototype.filter)
        return functionArray.filter(check);
    // shim in older browsers
    var l = functionArray.length, i, out = [];
    for( i=0; i<l; i++)
        if( check(functionArray[i]))
            out.push(functionArray[i]);
    return out;
}
于 2013-01-16T06:42:59.460 に答える
1

JavaScript をテストするためにjasmineに切り替えたいと思うかもしれません。

于 2013-01-16T06:41:44.887 に答える
1

私のテスト ライブラリsuite.jsは、このようなことを行います。基本的に、構文は次のようになります。

suite(add, [
    [[1, 2]], 3
]);

通常、部分適用を使用してパラメーターをバインドするため、テストは次のようになります。

suite(partial(add, 1), [
    -5, 4,
    2, 3
]);

そして、究極のレベルでは、これらのテストを完全にスキップして、テストを生成するためのコントラクトを定義します。これにはannotate.jsを使用します。この場合、次のような結果になります。

// implementation
function adder(a, b) {
    return a + b;
}

var add = annotate('add', 'adds things').on(is.number, is.number, adder);

// test some invariants now
suite(add, function(op, a, b) {
    return op(a, b) == op(b, a);
});

もはや些細な量のコードではないことはわかっています。ただし、これにより関数パラメーターの不変条件を定義でき、その情報に基づいてテストやドキュメントなどを生成できます。

suite.js は今のところ Node 環境でしか動作しませんが、十分な関心があれば、ブラウザに移植してそこでテストを実行できるようにしてもかまいません。

于 2013-01-16T06:52:47.837 に答える
0

QUnitを調べます。基本的に、関数のテストを一度に実行できます。

于 2013-01-16T06:42:50.947 に答える