2

私は Angular JS プロジェクトの最初の単体テストを書いていますが、理解しやすく維持しやすい方法でレイアウトする方法を考えています。

たとえば、ディレクティブの場合、これまでに見つけた例には通常、ディレクティブ用の 1 つのファイルがあり、その中に 1 つの describe() が含まれています。私の意見では、それは維持するのに非常に大きなファイルになりやすいと思います。

ディレクティブごとにファイルを作成し、そのディレクティブでディレクティブ自体の説明を作成する方が理にかなっていると思います。これは、myDate ディレクティブの場合のように、ファイル名が「myDateDirectiveSpec.js」です。これですでに読みやすくなっていますが、多くの関数を含むディレクティブについてはまだ少し心配です。以下の例では、どこでどの関数をテストしたかを示すコメントを追加していますが、もっと良い方法はありませんか?

describe("myDate", function() {
  var $compile, $rootScope;
  var validDate, invalidDate, invalidDateFormat;

  beforeEach(angular.mock.module('main'));

  beforeEach(inject(
      ['$compile','$rootScope', function($c, $r) {
          $compile = $c;
          $rootScope = $r;
      }]
  ));

  // test function validDate
  it("should check if the given date is a valid date", function() {
      validDate = '31-8-2011';
      expect(isValidDate(validDate)).toBe(true);
  })

  // test function formatDate
  it("format the given date", function() {
      validDate = '31-8-2011';
      expect(formatDate(validDate)).toBe('31/8/2011');
  })

  // test function anotherFunction
  it("....", function() {
      validDate = '31-8-2011';
      expect(anotherFunction(validDate)).toBe(true);
  })

  // test function anotherFunction
  it("....", function() {
      validDate = '31-8-2011';
      expect(anotherFunction(validDate)).toBe(true);
  })

  // test function anotherFunction
  it("....", function() {
      validDate = '31-8-2011';
      expect(anotherFunction(validDate)).toBe(true);
  })


});

ディレクティブに多くの関数が含まれている場合、上記の例で行ったことよりもスマートな方法でそれらを分割できますか?

4

1 に答える 1

0

私はまだ自分でそうしていないので、これがディレクティブのテストに適用されるかどうかは完全にはわかりません。でも; サービスとコントローラーをテストするとき、私が通常行うことは、describe ブロックのネストを開始することです。

私は Jasmine や、これが引き起こす可能性のある潜在的なパフォーマンスの問題についてはあまり詳しくありません (チェックアウトする予定です)。

だから私がやっていることは次のようなものです:

describe("myDate", function() {
  var $compile, $rootScope;
  var validDate, invalidDate, invalidDateFormat;

  beforeEach(angular.mock.module('main')); 

  beforeEach(inject(
    ['$compile','$rootScope', function($c, $r) {
        $compile = $c;
        $rootScope = $r;
    }]

  describe("validDate", function () {
    it("should check if the given date is a valid date", function() {
      validDate = '31-8-2011';
      expect(isValidDate(validDate)).toBe(true);
    });        
  });

  describe("someOtherFunction, function () {
    it("does something", function () {
     // do something here
    });

    it("does something else", function () {
     // do something else here
    });
  });

));

あなたと同じように、私はスペック ファイルをファイルごとに分割することを好みます (em にすべてのディレクティブを含む 'directives.js' ファイルはありません。それらはすべて分離されています)。私は、spec フォルダーをアプリケーション ファイルとほぼ同じ方法で保持することを好みます。これにより、整理しやすくなります。

個人的には (これもまた個人的な好みですが)、この記述ブロックの入れ子の方法は、テストを書いたり読んだりするときに目が楽になると思います。ただし、実際にパフォーマンスの問題がある場合は、1 つの記述ブロックに切り替えて、多くの it("") ブロックに切り替えることができます。

于 2013-11-22T14:50:36.927 に答える