Angular JS的单元测试文件设置

时间:2013-06-13 10:45:41

标签: unit-testing angularjs jasmine

我正在为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);
  })


});

如果一个指令中有很多函数,我可以用一种更聪明的方式将它们拆分出来,然后我在上面的例子中做了什么?

1 个答案:

答案 0 :(得分: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
    });
  });

));

和你一样,我更喜欢在每个文件的基础上拆分我的spec文件(我没有'directives.js'文件包含em中的所有指令,它们都是分开的)。我更喜欢保持我的spec文件夹与我的应用程序文件大致相同,这使我更容易保持井井有条。

我个人认为(再次,个人偏好)这种嵌套描述块的方式使得在编写和阅读测试时眼睛更容易。如果它确实有任何性能问题,那么可能会切换到一个描述块 - 以及很多(“”)。