1

私はシステムライフサイクルの逆の作業をしています。数か月前、私は大規模な JavaScript ライブラリを作成しました。その後、すべてを客観的にする必要がありましたが、今では単体テストを作成する必要があります。私はMavenを使用しておりjasmine-maven-plugin、pom.xmlに. 私が抱えている問題は、何のためにテストを書くべきか、そしていくつテストを書くべきかということです。

この最初の例は単純です。この関数は文字列を受け取り、最初の文字を大文字にして返します。

var toolsFn = {
    capitaliseFirstLetter: function(string) {
        return string.charAt(0).toUpperCase() + string.slice(1);
    }
},

したがって、私の単体テストは次のとおりです。

describe("toolsFn - capitaliseFirstLetter", function() {
    it("capitalises the first letter of a given string", function() {
        expect(toolsFn.capitaliseFirstLetter("hello World!")).toBe("Hello World!");
    });
});

ただし、他の多くの方法で何をすべきかわかりません。それらの大部分は、タブの変更、通知の表示、コントロールの無効化/有効化などの html コードを処理します。メソッドを期待するだけtoHaveBeenCalledですか、それともそれ以上のものがありますか?

タブを変更し、特定のタブをロードし、通知を非表示にする次の例を確認してください。

tabsFn = {
    changeTab: function() {
        $(tabButtons).addClass('inactive');
        $(tabContent).hide();
        $(this).removeClass('inactive');
        var tab = $(this).attr('tab');
        $('.tab-content-' + tab).show();
        return false;
    },
    loadTab: function(tab) {
        $(tabButtons).addClass('inactive');
        $(tabContent).hide();
        $('[tab~="' + tab + '"]').removeClass('inactive').removeAttr('disabled');
        $('.tab-content-' + tab).show();
    },

messageFn = {
    hideNotification: function(time) {
        $(messageFn.notificationBar).stop(true, true).fadeOut(time);
    },

説明をいただければ幸いです。

4

1 に答える 1

2

それらの大部分は、タブの変更、通知の表示、コントロールの無効化/有効化などの html コードを処理します。

そのために確認したいのは、結果の動作が正しいかどうかです (例: コンテンツが変更された)。これは通常、統合テストで行われますが、Jasmine は統合テストに最適なツールではありません。Selenium などのツールは、その種のテストをより適切に実行します。

機能がまだ適切に機能しているかどうかを確認するために、特定の関数が呼び出されるかどうかをテストし始めるというわなに陥らないでください。その機能の内部は変更され、他の機能を呼び出すことができますが、それは現在壊れているという意味ではありません。そのため、より高いレベルで行う方がよいのです (統合テスト)。

私が抱えている問題は、何のためにテストを書くべきか、そしていくつのテストを書くべきかということです

通常、アプリケーションの状態を変更することを意図していない関数ごとに単体テストを記述します。あなたの大文字化関数は、単体テストされた関数の良い例です。

いくつになるかは、単体テストを作成するための現在の時間と、将来それらを維持するために必要な時間によって異なります。また、各テストの有用性にも留意する必要があります。テストする内容が些細すぎる場合、単体テストを実行しても意味がない場合があります。十分な時間があれば、関数をテストするための優れた手法は、各エッジ ケースのテスト ケースを用意することです (最初の大文字の例では、その良い例は空の文字列、null または未定義になります)。一般的な場合のテスト。これにより、関数ごとに約 2 ~ 4 回のテストが行​​われます。これにより、通常、コードをかなり適切にカバーできます。

于 2013-08-06T18:30:15.093 に答える