node.js入门 - 13.api:使用assert测试和虚拟机(VM)

简介:   今天要介绍的两个模块分别是assert和vm,下面我们就分别介绍。   使用assert做测试   node中,我们可以使用assert模块来测试代码。equal()和notEqual()分别作相等性和不等性的判断,第一个参数是期望值,第二个参数是真实值,第三个参数是异常信息,例子如下: var assert = require('assert'); assert.

  今天要介绍的两个模块分别是assert和vm,下面我们就分别介绍。

  使用assert做测试

  node中,我们可以使用assert模块来测试代码。equal()和notEqual()分别作相等性和不等性的判断,第一个参数是期望值,第二个参数是真实值,第三个参数是异常信息,例子如下:

var assert = require('assert');
assert.equal(1, true, 'Truthy');
assert.notEqual(1, true, 'Truthy');

测试通过,不会有结果显示,但是一旦不通过就会有异常抛出,运行结果:

   equal和notEqual相当于==和!==,在测试布尔值时会出现点小问题,false,0,空值(''),null,undefined,NaN都会返回false值;其他值都会返回true,如非空字符串'false','0'等。因为他们只适合比较一些简单的值,如字符串、数字等。stringEqual() 和notStrictEqual()相当于=== 和 !==,可以做更精确的判断。

  ok()方法是比较真值的简洁方法,相当于是用==比较当前值是否为true。

var assert = require('assert');
assert.ok('This is a string', 'Strings that are not empty are truthy');
assert.ok(
0, 'Zero is not truthy');

  node提供了对object对象的比较方法deepEqual() 和 notDeepEqual(),他们采用下面的步骤比较对象,有一个步骤不匹配就抛出异常:1.采用===比较;2.比较他们是否是Buffers,如果是则比较长度,接下来每字节每字节的比较;3.是用==比较;4.最后如果参数是object对象,则比较他们得属性长度和属性值。可以看的出来,这两个方法性能上可能要差些,所以只有在需要的时候才使用他们。

  下面要介绍的方法是throws() 和 doesNotThrow(),他们用来判断一段代码是否会抛出异常,可以传四种类型的参数:返回true或false的比较函数、使用regex.test()的正则表达式、字符串和typeof构造函数。

var assert = require('assert');
assert.throws(function() {
  throw new Error("Seven Fingers. Ten is too mainstream.");
});
assert.doesNotThrow(function() {
  throw new Error("I lived in the ocean way before Nemo");
});

 

  VM(虚拟机)

  使用vm模块可以执行任意代码并返回结果,他有一系列的特性允许你切换代码执行上下文,他提供了一种沙盒模型。vm类似于eval()方法,但是提供了更多的特性和更好的api管理代码。使用vm有两种方法执行代码:1.使用内嵌代码,类似与使用eval;2.把预编译代码传入vm.Script对象。

  使用内嵌代码的形式:

var vm = require('vm');
vm.runInThisContext("1+1");

运行结果:

  下面我们来看vm.runInNewContext()的使用,第二个参数代表运行环境上下文。

var vm = require('vm');
var context = { alphabet:"" };
vm.runInNewContext("alphabet+='a'", context);
vm.runInNewContext("alphabet+='b'", context);
context

运行结果:

  下面我们看vm.createScript如何使用。首先在你node的根目录(一般为:‘C:\Program Files\nodejs’)准备一个名叫example.js的文件,内容为:

console.log(output);

在node REPL命令框运行如下代码:

var vm = require('vm');
var fs = require('fs');
var code = fs.readFileSync('example.js');
code.toString();
var script = vm.createScript(code);
script.runInNewContext({output:"Kick Ass"});
script.runInNewContext({"console":console,"output":"Kick Ass"});

运行结果:

使用vm.Script可以重复性的在不同上下文运行同样的代码。

adpics.aspx?source=kbh1983&sourcesuninfo
目录
相关文章
|
1月前
|
数据安全/隐私保护 虚拟化 Windows
如何在 VM 虚拟机中安装 Windows Server 2012 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 Windows Server 2012 操作系统保姆级教程(附链接)
69 0
|
1月前
|
数据安全/隐私保护 虚拟化 Windows
如何在 VM 虚拟机中安装 Windows 7 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 Windows 7 操作系统保姆级教程(附链接)
90 0
如何在 VM 虚拟机中安装 Windows 7 操作系统保姆级教程(附链接)
|
1月前
|
数据安全/隐私保护 虚拟化 Windows
如何在 VM 虚拟机中安装 Windows XP 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 Windows XP 操作系统保姆级教程(附链接)
116 0
|
1月前
|
Linux 网络安全 数据安全/隐私保护
如何在 VM 虚拟机中安装 CentOS Linux 9 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 CentOS Linux 9 操作系统保姆级教程(附链接)
157 0
|
1月前
|
安全 Linux 网络安全
如何在 VM 虚拟机中安装 Red Hat Enterprise Linux 9.3 操作系统保姆级教程(附链接)
如何在 VM 虚拟机中安装 Red Hat Enterprise Linux 9.3 操作系统保姆级教程(附链接)
89 0
|
2月前
|
消息中间件 Web App开发 JavaScript
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
Node.js【简介、安装、运行 Node.js 脚本、事件循环、ES6 作业队列、Buffer(缓冲区)、Stream(流)】(一)-全面详解(学习总结---从入门到深化)
75 0
|
1月前
|
API 开发工具 开发者
抖音商品详情API入门:为开发者和商家打造增长工具箱
抖音商品详情API入门:为开发者和商家打造增长工具箱
51 0
|
2月前
|
Web App开发 JavaScript NoSQL
深入浅出:构建基于Node.js的RESTful API
在当今快速发展的互联网时代,RESTful API已成为前后端分离架构中不可或缺的一部分。本文旨在为初学者和中级开发人员提供一个清晰、简洁的指南,详细介绍如何使用Node.js构建一个高效、可维护的RESTful API。通过结合实际案例,本文将从API设计理念出发,深入讲解如何利用Express框架及MongoDB数据库实现API的增删改查功能,同时探讨如何通过JWT进行安全认证,确保数据传输的安全性。此外,文章还将简要介绍如何使用Swagger生成API文档,使得API的测试和维护更加便捷。无论你是希望提升现有项目的API设计,还是想从零开始构建一个新项目,本文都将为你提供一条清晰的道路
|
1月前
如何在vm虚拟机里面安装win10操作系统
如何在vm虚拟机里面安装win10操作系统
12 0
|
1月前
|
Web App开发 JavaScript 前端开发
使用Node.js和Express构建RESTful API
使用Node.js和Express构建RESTful API
18 0