【问题标题】:Unit test file setup for Angular JSAngular JS 的单元测试文件设置
【发布时间】:2013-06-13 10:45:41
【问题描述】:

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

例如,对于指令,到目前为止我发现的示例通常有一个用于指令的文件,其中包含一个 describe()。在我看来,这很容易成为一个需要维护的大文件。

我认为每个指令都有一个文件更有意义,然后在该指令中对指令本身进行描述,例如 myDate 指令,文件名为“myDateDirectiveSpec.js”。这已经使事情更容易阅读,但是我仍然有点担心具有很多功能的指令。在下面的示例中,我添加了 cmets 来指示我在哪里测试哪个函数,但没有更好的方法吗?

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


});

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

【问题讨论】:

    标签: unit-testing angularjs jasmine


    【解决方案1】:

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

    我对 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”文件,它们都是分开的)。我更喜欢让我的规范文件夹与我的应用程序文件几乎相同,这让我更容易保持井井有条。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-01-21
      • 1970-01-01
      • 1970-01-01
      • 2020-08-03
      • 2015-12-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多