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可以重复性的在不同上下文运行同样的代码。

目录
相关文章
|
7月前
|
测试技术 开发者 Python
Python单元测试入门:3个核心断言方法,帮你快速定位代码bug
本文介绍Python单元测试基础,详解`unittest`框架中的三大核心断言方法:`assertEqual`验证值相等,`assertTrue`和`assertFalse`判断条件真假。通过实例演示其用法,帮助开发者自动化检测代码逻辑,提升测试效率与可靠性。
532 1
|
9月前
|
Web App开发 JavaScript 测试技术
Playwright 极速入门:1 小时搞定环境搭建与首个测试脚本
本文带你1小时快速入门Playwright,完成环境搭建并编写首个测试脚本。Playwright是微软推出的现代化Web自动化测试工具,支持Chromium、Firefox和WebKit三大浏览器引擎,具备跨平台、多语言(Python/JS/Java/C#)特性。其核心优势包括:智能自动等待机制减少失败率、内置录制工具实时生成脚本、多语言灵活选择,以及真移动端设备模拟能力,显著提升测试效率和可靠性。
|
测试技术 持续交付 开发者
探索自动化测试的无限可能:从入门到精通
在软件开发领域,确保产品质量是至关重要的。自动化测试作为一种高效、可靠的测试方法,正逐渐成为行业标准。本文将带你深入了解自动化测试的世界,从基础概念到实践技巧,帮助你掌握这一强大的工具。无论你是初学者还是有经验的开发者,都能从中获得宝贵的知识和启发。
|
Java 测试技术 开发者
初学者入门:掌握单元测试的基础与实践
【10月更文挑战第14天】单元测试是一种软件测试方法,它验证软件中的最小可测试单元——通常是单独的函数或类——是否按预期工作。单元测试的目标是确保每个模块在其自身范围内正确无误地运行。这些测试应该独立于其他模块,并且应该能够反复执行而不受外部环境的影响。
445 2
|
8月前
|
存储 Ubuntu Linux
使用VM虚拟机安装最新版Ubuntu系统
重启后开机进入登录界面 输入前面设置的密码进入系统 成功启动Ubuntu系统
|
域名解析 API PHP
VM虚拟机全版本网盘+免费本地网络穿透端口映射实时同步动态家庭IP教程
本文介绍了如何通过网络穿透技术让公网直接访问家庭电脑,充分发挥本地硬件性能。相比第三方服务受限于转发带宽,此方法利用自家宽带实现更高效率。文章详细讲解了端口映射教程,包括不同网络环境(仅光猫、光猫+路由器)下的设置步骤,并提供实时同步动态IP的两种方案:自建服务器或使用三方API接口。最后附上VM虚拟机全版本下载链接,便于用户在穿透后将服务运行于虚拟环境中,提升安全性与适用性。
877 7
|
数据采集 人工智能 自然语言处理
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
Midscene.js 是一款基于 AI 技术的 UI 自动化测试框架,通过自然语言交互简化测试流程,支持动作执行、数据查询和页面断言,提供可视化报告,适用于多种应用场景。
4088 1
Midscene.js:AI 驱动的 UI 自动化测试框架,支持自然语言交互,生成可视化报告
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
1238 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
Java 测试技术 Android开发
探索自动化测试的奥秘:从入门到精通
【10月更文挑战第37天】本文将带你进入自动化测试的世界,从基础知识到实战案例,逐步揭示自动化测试的神秘面纱。我们将一起探讨如何利用代码来简化测试过程,提高效率,并确保软件质量。无论你是初学者还是有经验的开发者,这篇文章都能为你提供有价值的见解和技巧。让我们一起踏上这段探索之旅吧!
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
2088 1
下一篇
开通oss服务