Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

单元测试 #1

Open
791045873 opened this issue Nov 4, 2018 · 4 comments
Open

单元测试 #1

791045873 opened this issue Nov 4, 2018 · 4 comments

Comments

@791045873
Copy link
Owner

前情提要:
本学习笔记会大体介绍一下与单元测试相关的几个库。包括,Node Assert、mocha、should.js、Karma、Travis CI。
其中Node Assert与should.js都是断言库,Node Assert是NodeJs本身具备的断言库,should.js是一个第三方库。在我的理解中,断言库就是判断你的业务代码的结果是否与预期结果相同的库。
Mocha是一个测试框架,测试框架是用来组织你用断言库写出来每一个断言的工具。它提供了一些api,让你可以描述、梳理你的每一个断言。并且会在控制台看到测试的结果。
Karma是一个联结你的测试代码与浏览器的库,具体作用还没搞明白,之后再来补充。
Travis CI是一个帮你自动化处理测试、打包的工具,它与github连接起来,通过一些配置,直接控制你的git仓库。具体的使用,目前没怎么搞懂,之后补充。

Node Assert

通过浏览Node Assert的api,我们可以大体知道一个断言库的构成是怎么样的。下面我就大概梳理一下。

断言结果与预期一致的api

  • assert.deepEqual与assert.deepStrictEqual :这两个api只是名字不同,均用来判断两个比较值是否深度相等,具体的比较方式请查看此链接
  • assert.equal与assert.strictEqual:这两个api同样只是名字不同,与前两个api不同的是,他们并不作深度判断,并且前者(assert.equal)不做全等(===)比较。具体的比较方式请查看此链接

断言结果与预期不一致的api

  • assert.notDeepEqual与assert.notDeepStrictEqual:通过api的命名,我们就可以看出来这两个api的功能与比较方式,在此不再赘述

  • assert.notEqual与assert.notStrictEqual:同上

断言异步函数未发生异常的api

  • assert.doesNotReject
  • assert.doesNotThrow

断言异步函数发生异常的api

  • assert.rejects
  • assert. throws

在断言中主动抛出异常的api

  • assert.fail

  • assert.ifError

断言给定值为真的api

  • assert.ok与assert

通过以上的大致梳理,可以看出一个断言库的大体功能为:判断结果与预期是否一致,给定异步函数是否有异常抛出,主动抛出异常,给定值是否为真。而其他的第三方断言库功能会比Node Assert更强大一些,但是核心思想如出一辙。

@791045873
Copy link
Owner Author

should.js

should.js的基础api大体是和node内置的assert模块的api相同的。断言库的功能也大同小异。只是从api的多样性与易用性来讲,should.js肯定是会强一些。比如,should,js可以像jq一样支持链式调用。
这一类的工具库具体使用时再看api文档即可。大概通览一遍文档,知道有哪些api可以做什么事。不用花太多时间研究。

@791045873
Copy link
Owner Author

mocha

mocha作为一个测试框架,可以用来组织你的测试代码(就是用assert,should.js写出来的一堆断言)。
我觉得掌握以下几点就差不多可以使用mocha了:

  • 能够明白如何使用describe和it这两个api组织代码。

  • 会使用before,after,beforeEach,afterEach这四个生命周期钩子组织测试代码。

  • 会使用done这个api在异步代码的回调中测试异步方法。或者直接返回promise处理异步(mocha自己可以处理返回函数为promise的情况)

  • 在mocha中不建议使用剪头函数,因为剪头函数会绑定上下文的this

@791045873
Copy link
Owner Author

Karma

Karma是一个将测试代码与浏览器相联接的库。即,他可以把你的测试代码放在真实的浏览器环境中运行。以便检测浏览器的兼容性问题。
使用Karma需要写一个配置文件。如同webpack配置文件一般,虽然都很难上手,但是也得硬啃啊。
在配置文件中,browsers项用来指定浏览器,若要使用Chrome浏览器,需要安装一个相关插件,文档中有相关介绍。
具体配置请查看文档。

@791045873
Copy link
Owner Author

Travis CI

Travis CI可以与github仓库绑定。每次在你push代码的时候,Travis CI会拉取你的新代码。通过配置文件,他会在对应的环境中跑你的工程,如果成功运行,会点亮build passing的图标。
具体的配置文件中有以下几点:

  • language用来指定你的工程所用的编程语言,具体的支持列表可在文档中查看。同时可以指定语言版本

  • addons对前端来讲很有用,可以指定哪些浏览器

  • before_script、before_install等生命周期钩子

具体更复杂的配置查看文档。

Travis CI只做测试其实是大才小用了,他可以做更多的自动化的内容。不过我也没研究啦。
以上所记录的其实都没有什么好研究的,我觉得工具类的东西,平时科普一下,懂得就好。用时在看文档,照本宣科即可。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant