10

Qunit と単体テストは初めてです。

次の関数を何をどのようにテストするかを理解しようとしています。現時点ではあまり機能しませんが、間違った値を渡すとエラーがスローされることを主張したかったのです。

function attrToggle (panel, attr) {
    'use strict';

    if (!panel) { throw new Error('Panel is not defined'); }
    if (!attr) { throw new Error('Attr is not defined'); }
    if (typeof panel !== 'string') { throw new Error('Panel is not a string'); }
    if (typeof attr !== 'string') { throw new Error('Attr is not a string'); }
    if (arguments.length !== 2) { throw new Error('There should be only two arguments passed to this function')}

};

これらの条件のいずれかが満たされない場合にエラーがスローされることをアサートするにはどうすればよいですか?

Qunit の「レイズ」アサーションを見ようとしましたが、誤解していると思います。私の解釈では、エラーがスローされた場合、テストはパスします。

したがって、次のようなものをテストした場合:

test("a test", function () {
    raises(function () {
        throw attrToggle([], []);
    }, attrToggle, "must throw error to pass");
});

エラーがスローされるため、テストは成功するはずです。

4

2 に答える 2

17

いくつか間違っています。実際の例はhttp://jsfiddle.net/Z8QxA/1/にあります。

主な問題は、2番目の引数として間違ったものを渡していることですraises()。2番目の引数は、正しいエラーがスローされたことを確認するために使用されるため、正規表現、エラーの種類のコンストラクター、または独自の確認を可能にするコールバックのいずれかが必要です。

したがって、あなたの例では、attrToggleスローされるエラーのタイプとして合格していました。コードは実際にError型をスローするため、チェックは実際に失敗しました。2番目の引数として渡すErrorと、必要に応じて機能します。

test("a test", function () {
    raises(function () {
        attrToggle([], []);
    }, Error, "Must throw error to pass.");
});

次に、 insidethrowを呼び出すときにキーワードは必要ありません。attrToggle()raises()

于 2012-04-17T11:54:40.080 に答える
1

うん、あなたはほとんどそれを正しく理解しました。raises()コードをテストするときにスローされるエラーが予想されます。

通常try-catch、関数に使用して、間違った引数の型をキャッチします。raises()をテストするために使用しthrowます。引数として間違った値を配置し、テストが準拠していないraises()場合、何かがキャッチされませんでした。

于 2012-04-17T11:53:41.283 に答える