基于Jasmine 的 Javascript 测试 -- 第三章
发布在基于Jasmine的Javascript测试2013年10月13日view:4141
在文章任何区域双击击即可给文章添加【评注】!浮到评注点上可以查看详情。

第三章 写好的测试


那么,你现在了解了应该如何使用Jasmine编写测试。理论上来说,你可以为你的代码编写无穷多数量的测试,测试所有的诡异情形,但事实上你手中可用来做测试的时间并不是无穷多的。你必须为你的项目编写正确地specs。

主观上来说,并不存在什么绝对的真理。但是当我在许多项目中使用了Jasmine作为测试工具之后,还是想给你们一些简单地建议。

主要原则:当你有了怀疑,就测试吧

如果你对是否应该进行测试举棋不定,进行一点测试也没什么大不了的。作为一个开发者,如果编写spec需要花费你大量的时间,你可能会去想是否真的值得花时间去做这样一件事。Jasmine有时运行的速度很慢(在可能需要做大量计算的时候),你也可能会在三考虑是否应该使用它。但通常来说,specs是短小精悍且速度很快的,所以当你举棋不定时,就编写一些spec吧!

测试组件

对你的代码中的组件进行测试,不要一次性测试所有代码。例如,当你有一个计算器类,你不会想要像这样去测试它:

 describe("calculator addition", function() {
      it("can add, subtract, multiply, and divide positive integers",
         function() {
          var calc = new Calculator;
          expect(calc.add(2, 3)).toEqual(5);
          expect(calc.sub(8, 5)).toEqual(3);
          expect(calc.mult(4, 3)).toEqual(12);
          expect(calc.div(12, 4)).toEqual(3);
          });
    });

这个巨型的spec应该分成四个不同的spec,因为你真早想测试的是四个不同的部分。下面是正确地测试方式:

   describe("calculator addition", function() {
      var calc;
      beforeEach(function() {
          calc = new Calculator();
      });
      it("can add positive integers", function() {
          expect(calc.add(2, 3)).toEqual(5);
      });
      it("can subtract positive integers", function() {
          expect(calc.sub(8, 5)).toEqual(3);
      });
      it("can multiply positive integers", function() {
          expect(calc.mult(4, 3)).toEqual(12);
      });
      it("can divide positive integers", function() {
          expect(calc.div(12, 4)).toEqual(3);
                       }); 
     });

每个spec应该只测试一种情形或场景。在前面的例子中,如果你的mult函数有错误,这个spec将会运行失败而其他的spec将会运行通过。在这个例子中,只有一个测试运行失败,你也能快速的发现是你的乘法函数出错了。

黑箱测试

在编写行为驱动测试时,你应该想象你的软件置于一个黑箱之中。你只关心软件的行为,并不关心其内部发生了什么。

一个简单地例子:如果你的person对象中的一个函数包含了一个私有方法(严格意义上来说并不是私有的)叫做_generateHello,代码如下所示:

   var person = {
      // 私有方法
      _generateHello: function() {
          return "hello";
      },
      // 公有方法
      helloWorld: function() {
          return this._generateHello() + " world";
      }
 };

因为_generateHello是一个私有方法,你永远不能在Jasmine中测试它。你也不需要去测试它,因为你压根就不关心它是怎么工作的。你只关心公有方法怎么工作。


本系列文章译自Javascript testing with Jasmine,2013年3月由O’Reilly 出版社出版。

翻译文章需要花费大量时间和精力。如果您觉得本文对自己有帮助,请点击下面链接为我提供一些赞助。您的赞助是我继续前进的动力。

评论
发表评论
暂无评论
WRITTEN BY
张小俊128
Intern in Baidu mobile search department。认真工作,努力钻研,期待未来更多可能。
TA的新浪微博
PUBLISHED IN
基于Jasmine的Javascript测试

本系列文章译自Javascript testing with Jasmine,2013年3月由O’Reilly 出版社出版。

我的收藏