2

我正在为 Angular JS 项目编写我的第一个单元测试,我想知道如何以易于理解和维护的方式进行布局。

例如,对于指令,到目前为止我发现的示例通常有一个指令文件,其中包含一个 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

我不完全确定这是否适用于测试指令,因为我自己还没有这样做。然而; 在测试服务和控制器时,我通常会开始嵌套描述块。

我对 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
    });
  });

));

和你一样,我更喜欢在每个文件的基础上拆分我的规范文件(我没有一个“directives.js”文件,我的所有指令都在 em 中,它们都是分开的)。我更喜欢让我的规范文件夹与我的应用程序文件几乎相同,这让我更容易保持井井有条。

我个人认为(同样,个人偏好)这种嵌套描述块的方式在编写和阅读测试时更容易让人眼前一亮。但是,如果它确实存在任何性能问题,则可能会切换到一个描述块 - 以及很多它(“”)。

于 2013-11-22T14:50:36.927 回答