2013-07-24 34 views
-1

我正在为我的JavaScript Web应用程序编写QUnit测试。在阅读QUnit API documentation之后,我无法找到标记模块,测试和断言的任何标准。QUnit模型,测试和声明命名约定

的API说明书和实施例是相当基本的:

模块名称:标签本组试验。示例:module("group a");

测试标题:正在测试的单元的标题。示例:test("hello test", function(){});

确认消息:声明的简短说明。例如:ok(true, "true succeeds");

我找到的文章在那里关于单元测试在大:What are some popular naming conventions for Unit Tests?Unit test naming best practices

但是,我希望有一个建立/普遍接受的标准是特定于QUnit的模块 - >测试 - >断言模式。有没有?

回答

1

无论您使用的测试框架如何,无论您是在编写客户端还是服务器端单元测试,采用某种“名称约定”的主要关注点都是为了确保测试名称清楚地向所有人说明什么是系统和被测试的行为。

假设我们要测试的这款代码:

var MyClass = (function() { 
    function MyClass() { 
     this.defaultMessage = "Hello person without a name"; 
    } 
    MyClass.prototype.getHelloMessage = function (firstName, lastName) { 
     if (!firstName && !lastName) { 
      return this.defaultMessage; 
     } 
     var message = "Hello"; 
     if (lastName) { 
      message += " " + lastName; 
     } 
     if (firstName) { 
      if (lastName) { 
       message += ","; 
      } 
      message += " " + firstName; 
     }    
     return message; 
    };   
    return MyClass; 
})(); 

上面的代码只是格式化一个简单的信息与给定的输入参数,如果有的话,如果没有指定参数,返回一个默认的消息。

对我来说,模块名称将是类名和一个分离器,使测试名称列表可读性更强:

QUnit.module("MyClass tests - "); 

人们可以简单的名称测试:

test("getHelloMessage test", function() {} 

,并断言所有的期望在一个文本中。

我更喜欢一个更详细的方法,这将是清楚了解每个测试的目的:

test("getHelloMessage without input parameters should return default message", function() {}); 
test("getHelloMessage with only lastName should not display a comma", function() {}); 
test("getHelloMessage with only firstName should not display a comma", function() {}); 

这样,每个测试有一个明确的目的,根据需要,他们将保留作为小,而当一次测试失败,很容易理解代码中哪些部分受到最新更改的影响。

好的标准是你所在团队的所有成员都同意这将帮助每个人找到并解决错误,并帮助他们编写更好的单元测试。

+0

非常感谢@Justin的代码格式。 我没有看到那些阻止格式化的隐藏字符,但是您在那里发现了它们! :-) – jfoliveira