登录
注册
node.js 学习社区
Node.js入门学习(三)——node.js程序测试调试

bendmoly

2015-09-21 16:55

    作为一个程序员,除了写出优美流畅的代码,在入门以及变牛B的过程中,少不了会受到程序中bug的阻碍,而这一切阻碍也是促进着我们去写出更好的代码。在学习node的过程中,有时会出现程序上的错误,今天就来聊一下关于node应用程序的测试。

    首先,我们为什么要测试程序?

  • 它是质量保证的简单一层。
  • 它让开发人员得以确保应用程序按期待的方式动作。
  • 它支持开发人员创建新功能时不破坏现有功能。
  • 它可集成到第三方代码质量和测试工具中。
  • 它让开发人员团队得以保持对应用程序如何工作的一直理解。
  • 它极大地增强代码的稳定性。
  • 它让开发人员可以重构代码库并确保它依旧按期待的方式工作。
   所以介于此,对程序的测试是一个程序员必要的工作之一。

    1.Assert(断言)模块

    这是一个node模块中一个简单的测试框架,它提供一组断言方法,让开发人员得以为node.js应用程序创建低级测试,对于它的断言方法,很多方式都与我们学习的javascript相同,为了使用它,我们首先要在脚本中请求它。

var assert = require( 'assert' );
    而后我们在程序中使用它的一个断言方法,这里以比较两个值来演示。


assert.strictEqual( "hello" , "hello" );
    对于assert模块测试,在终端运行的时候当它通过的时候是不会有任何提示的。


             

    2.使用第三方测试工具(Nodeunit)

    nodeunit构建与assert模块之上,添加了建立与拆卸测试的能力、异步测试能力以及模拟和桩的功能。

    首先需要在目录内安装nodeunit模块。

npm install -g nodeunit
    也可以采用包package.json来对其进行安装。


{
    "name" : "nodeunit_example",
    "version" : "0.0.0",
    "private" : true,
    "deveDependencies" : {
        "nodeunit" : "0.7.4"
    }
}

    编写完上述包的内容,再对其进行安装。

    之后就是采用nodeunit的断言对程序进行测试,我们需要在代码内添加nodeunit的断言代码。

export.firstTest = function( test ) { //测试的描述
    test.expect( 1 );                 //断言数
    test.strictEqual( "hello" , "hello" );
    test.done();
};
export.secondTest = function( test ) {
    test.expect( 1 );
    test.strictEqual( "hello" , "hi" );
    test.done();
};
    如果在安装此模块的过程已经将其全局安装,那么在终端上可直接使用命令来测试。

nodeunit test.js
    而如果是使用json来进行安装,则需要在项目文件夹中引用二进制文件。

./node_modules/nodeunit/bin/nodeunit test.js

    测试后第一个Test测试通过,而第二个Test则不通过。

    对于第三方测试工具还有很多,但是对于程序的程序,我们往往不是应该考虑什么测试工具比较好,而是通过学习,使用一款上手的测试工具来测试我们的程序,其中就有Vows和Mocha,这里就不过多提及。

    对于代码的调试,我们也有很简单的方法,在任何一款编程语言中都有一个输出功能,利用这个输出功能则可以找到我们代码段中哪一部分出现的问题,这里称之为STDIO模块。

    在所需要测试的代码中插入一行输出代码,

console.log( 'Debugging message' );
    那么在运行的过程过就能看到它的提示。它可以快速而直接的解决:
  • 检查变量或字符串的值
  • 记录脚本调用了一个函数
  • 记录来自第三方服务的响应

   如果想记录错误,可以加上console.warn(),又名console.error(),这样的话错误就会打印到标准错误流中。

    而且我们也可以使用简单的基准测试来判断一个代码段的性能问题。STDIO模块提供console.time()和console.timeEnd()同时通过使用一个标签作为参数来判断一个代码段的性能。在程序代码段前启动定时器console.time('name'),在代码段后停止定时器console.timeEnd('name'),这样在终端运行程序的时候可以看到所测试的代码段的性能问题。

    我们也可以使用Node.js调试器来对我们的代码进行调试,仅需要在需要进行调试的代码后加入

    debugger

    这样在程序执行的时候程序会自动在那一断点停止。在终端进行调试

    node debug test.js

    调试器会运行到第一个断点,然后键入cont,如此就可以使用repl进行查询。查询后使用Ctrl+C来跳出,然后键入cont进入到下一个断点,如此操作完成断点调试。

回复 · 1

发表回复

你可以在回复中 @ 其他人