Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 3416|回复: 1
打印 上一主题 下一主题

nodejs学习笔记二 [npm常用命令及单元测试]

[复制链接]

437

主题

566

帖子

2381

积分

金牌会员

Rank: 6Rank: 6

积分
2381
跳转到指定楼层
#
发表于 2015-12-11 13:51:09 | 只看该作者 |只看大图 回帖奖励 |正序浏览 |阅读模式
本帖最后由 jimu 于 2015-12-12 00:42 编辑

一、npm常用命令
npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准。有了npm,可以很快的找到特定服务要使用的包,进行下载、安装以及管理已经安装的包。

1、npm install moduleNames:安装Node模块
安装完毕后会产生一个node_modules目录,其目录下就是安装的各个node模块。

node的安装分为全局模式和本地模式。
一般情况下会以本地模式运行,包会被安装到和你的应用程序代码的本地node_modules目录下。
在全局模式下,Node包会被安装到Node的安装目录下的node_modules下。

全局安装命令为$npm install -g moduleName。
获知使用$npm set global=true来设定安装模式,$npm get global可以查看当前使用的安装模式。

示例:
npm install express
默认会安装express的最新版本,也可以通过在后面加版本号的方式安装指定版本,如npm install express@3.0.6

npm install <name> -g
将包安装到全局环境中

但是代码中,直接通过require()的方式是没有办法调用全局安装的包的。全局的安装是供命令行使用的,就好像全局安装了vmarket后,就可以在命令行中直接运行vm命令

npm install <name> --save
安装的同时,将信息写入package.json中项目路径中如果有package.json文件时,直接使用npm install方法就可以根据dependencies配置安装所有的依赖包,这样代码提交到github时,就不用提交node_modules这个文件夹了。

2、npm view moduleNames:查看node模块的package.json文件夹
注意事项:如果想要查看package.json文件夹下某个标签的内容,可以使用$npm view moduleName labelName

3、npm list:查看当前目录下已安装的node包
注意事项:Node模块搜索是从代码执行的当前目录开始的,搜索结果取决于当前使用的目录中的node_modules下的内容。$ npm list parseable=true可以目录的形式来展现当前安装的所有node包

4、npm help:查看帮助命令

5、npm view moudleName dependencies:查看包的依赖关系

6、npm view moduleName repository.url:查看包的源文件地址

7、npm view moduleName engines:查看包所依赖的Node的版本

8、npm help folders:查看npm使用的所有文件夹

9、npm rebuild moduleName:用于更改包内容后进行重建

10、npm outdated:检查包是否已经过时,此命令会列出所有已经过时的包,可以及时进行包的更新

11、npm update moduleName:更新node模块

12、npm uninstall moudleName:卸载node模块

13、一个npm包是包含了package.json的文件夹,package.json描述了这个文件夹的结构。访问npm的json文件夹的方法如下:
$ npm help json
此命令会以默认的方式打开一个网页,如果更改了默认打开程序则可能不会以网页的形式打开。

14、发布一个npm包的时候,需要检验某个包名是否已存在
$ npm search packageName

15、npm init:会引导你创建一个package.json文件,包括名称、版本、作者这些信息等

16、npm root:查看当前包的安装路径
npm root -g:查看全局的包的安装路径

17、npm -v:查看npm安装的版本

更多命令请参看npm官方文档:https://www.npmjs.org/doc/



二、安装单元测试包
  • 使用mocha和should.js搭建nodejs的单元测试
创建mochaPlusShouldjs文件夹
然后在mochaPlusShouldjs文件夹中创建一个名为test的文件夹,将来用来测试的脚本都放在这个文件夹里面
首先使用npm以全局方式安装mocha模块:
npm install -g mocha然后通过命令行进入到mochaPlusShouldjs文件夹中,安装should模块:
npm install should

准备工作就绪之后,我们可以开始来尝试一些简单的实例,看看我们是如何使用mocha和should.js是进行测试工作的。可以直接先在项目根目录下执行mocha命令:
  1. E:\github\mochaPlusShouldjs>mocha

  2.   0 passing (3ms)
复制代码
运行了,但是什么都没有发生。因为mocha扫描了test文件夹,没有发现可以执行的测试脚本文件。下面我们往test目录中添加一个名为test.js的测试文件,代码如下:

  1. require("should");

  2. var name = "firemail";

  3. describe("Name", function() {
  4.     it("The name should be firemail", function() {
  5.         name.should.eql("firemail");
  6.     });
  7. });

  8. var Product = function(name) {
  9.     this.name = name;
  10. };
  11. var firemail = new Product(name);

  12. describe("InstanceOf", function() {
  13.     it("Firemail should be an instance of Product", function() {
  14.         firemail.should.be.an.instanceof(Product);
  15.     });

  16.     it("Firemail should be an instance of Object", function() {
  17.         firemail.should.be.an.instanceof(Object);
  18.     });
  19. });
  20. describe("Property", function() {
  21.     it("Firemail should have property name", function() {
  22.         firemail.should.have.property("name");
  23.     });
  24. });
复制代码
然后重新执行mocha命令,得到的结果如下:


可以看到控制台上已经显示四个测试用例都成功通过了。如果有测试用例没有通过的话,例如我们加上判断name是不是等于iremail的语句,控制台的显示如下:




接下来我们来分析一下之前的代码,首先为了使用should.js的断言库,在代码的开头部分必须引入should模块,但是mocha模块则无需显式引入。

  每一个describe语句都可以看作是一个测试模块,它只是起着划分各个模块部分的作用,describe语句的第一个参数就是对该模块的描述。

  在describe语句中的it语句才是测试的主体部分,每一个it语句都是一个测试单元,一个测试模块中可以有很多个测试单元。it语句的第一个参数的作用就是描述该单元的测试任务或要求,以便在测试用例数量较多时可以清楚地知道究竟有哪些功能的测试没有通过。

  在it语句的回调函数中就可以通过书写should.js断言库中的语句进行测试了。should模块是assert模块的扩展,它的语法可以在上面的代码中看到,都是类似firemail.should.be.an.instanceof(Product); 这样的,跟我们日常用的语法几乎一模一样, 非常易于使用。由于篇幅的关系,我只在前面举了一些简单的例子,有关更多should.js的用法可以参考这里的文档: https://github.com/visionmedia/should.js。另外mocha也可以与其他的第三方断言库[expect.js等]搭配使用,在了,有兴趣的话可以自己去看。接下来将介绍如何对异步函数进行测试的例子。
接下来为了进行异步测试,在test目录下创建一个名为testReadFile.js的文件,代码如下:
  1. require("should");
  2. var fs = require("fs");
  3. describe("readFile", function() {
  4.     it("The file content should be firemail", function(done) {
  5.         fs.readFile("text.txt", "utf8", function(err, data) {
  6.                                                 data.should.eql("firemail");
  7.             done();
  8.         });
  9.     });
  10. });
复制代码
再创建一个名为text.txt的文本文件放在mochaPlusShouldjs文件夹下,其内容如下:


执行mocha命令进行测试,结果如下:

  

  观察上面的代码,有一点必须注意的是:在进行异步测试的时候,it语句的回调函数会带有一个参数done。我们必须在要测试的异步函数的回调函数的最后加上done()这一句,否则测试就会出错,因为测试不等异步函数执行完毕就结束了。



  • 使用mocha和expect.js搭建nodejs的单元测试
进入mochaPlusExpector目录安装

E:\mochaPlusExpector>npm install expect.js

在mochaPlusExpector目录下创建test文件夹
在test文件夹下测试测试使用文件test.js
内容如下:
  1. var expect = require('expect.js');
  2. var name = "firemail";

  3. describe("Name", function() {
  4.     it("The name should be firemail", function() {
  5.         expect(name).to.eql("firemail");
  6.     });
  7. });
复制代码
在mochaPlusExpector目录下执行mocha命令,结果如下:





回复

使用道具 举报

1272

主题

2067

帖子

7964

积分

认证用户组

Rank: 5Rank: 5

积分
7964
楼主
发表于 2020-9-15 18:18:22 | 只看该作者
本帖最后由 Qter 于 2020-9-15 18:23 编辑

npm里devDependencies和dependencies的区别
感觉这个可以一句话说清楚,如这两个单词的意思,线上和开发环境。没有这个东西你代码就不能跑起来,那就放在dependencies里面。反之,把这东西去掉了,也不影响代码运行,比如一些编译工具,如将es6编成es5,这个只在开发阶段用得到,线上用不到,所以应该放在devDependencies里

保存在devDependencies

npm install gulp --save-dev

保存在dependencies

npm i axios --save
如果想使用淘宝源下载, 主要为了速度,建议不要用cnpm,而是直接修改源地址

npm i axios --save  --registry=http://registry.npm.taobao.org

https://docs.npmjs.com/
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|firemail ( 粤ICP备15085507号-1 )

GMT+8, 2024-11-26 19:51 , Processed in 0.064259 second(s), 22 queries .

Powered by Discuz! X3

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表