使用 Travis CI 进行 Javascript 集成测试

2014-06-22 · 419 chars · 3 min read

前面一直在学习 Jasmine,并且很简单很简单的测试了jqPaginator的代码,这一次来看看怎么使用 Travis CI 对 Github 的项目进行自动化集成测试。借用 wikipedia 的话介绍下:

Travis CI 是在软件开发领域中的一个在线的,分布式的持续集成服务,用来构建及测试在 GitHub 托管的代码

虽然 jqPaginator 的测试还没写好(测试真是门学问,还需下功夫好好研究),但忍不住先来看看怎么用 Travis CI。

Javascript测试框架Jasmine(七):jqPaginator测试实例

2014-06-21 · 808 chars · 5 min read

jqPaginator是我自己写的一个分页组件,已经用在了公司的两个项目上。这次学习 Jasmine,首先想到的就是怎么测试下 jqPaginator。

看过 jqPaginator项目的都知道,它是基于grunt自动化构建的,使用 Jasmine 自动化测试的话,就要用到grunt-contrib-jasmine了。先大概讲一下 grunt-contrib-jasmine:

Javascript测试框架Jasmine(六):异步代码测试

2014-06-21 · 652 chars · 4 min read

模拟 Timeout

Jasmine Clock 可以用来测试setTimeoutsetInterval 的回调操作。它使回调函数同步执行,当 Clock 的时间超过 timer 的时间,回调函数会被触发一次。这使依赖于时间的代码更加易于测试。

Jasmine Clock 使用jasmine.clock().install 在需要调用 timer 函数的 spec 和 suite 中初始化。在执行完测试的时候,一定要卸载 Clock 来还原 timer 函数。使用jasmine.clock().tick 设置时间以使注册的回调触发。

Javascript测试框架Jasmine(五):Spies

2014-06-21 · 1,307 chars · 7 min read

Spies 是 Jasmine 里面比较高端的方法,可以用来模拟函数的执行,以达到隔离复杂依赖的效果。例如,你要测试列表的处理是否正确,但是数据是异步请求接口取得的,这时你就可以使用 Spies,模拟返回各种不同的数据进行测试。

spy 可以保存任何函数的调用记录和输入的参数,spy 只能存在于 describe 和 it 中,在 spec 执行完之后销毁。先说两个针对 spies 的 Matcher,toHaveBeenCalled 用来测试函数是否被调用过;toHaveBeenCalledWith 用来测试函数被调用时的参数列表,匹配的话返回true ,看个例子:

Javascript测试框架Jasmine(四):自定义Matcher

2014-06-20 · 912 chars · 5 min read

一个项目常常需要封装自定义的 Matcher 来在多个 spec 中使用,这次讲下怎么写兼容 Jasmine 的自定义 Matcher。

自定义的 Matcher 从本质上讲是一个对比函数,它的函数名就是暴露给 expect 调用的名称,它接受actual 值和expected 值。这个函数会传入 Jasmine 作用域中,可以在beforeEach 中调用到。每次 spec 执行完后,都会把自定义 Matchers 卸载,下面看个简单例子:

Javascript测试框架Jasmine(三):Setup、Teardown、嵌套describe等

2014-06-20 · 891 chars · 5 min read

上一篇把 Matcher 说了说,本来该说自定义 Matcher 的,但是发现有些七七八八的细节没讲,那就今天先把这些基础说了。

Setup and Teardown

Setup 和 Teardown 可以帮助 Suite 执行一些重复的代码,Jasmine 提供了beforeEachafterEach 函数。很显然,beforeEach 在 describe 中的任何 spec 执行之前运行,afterEach 在任何 spec 执行之后运行。具体的逻辑看 Demo 就一目了然了:

Javascript测试框架Jasmine(二):Matchers

2014-06-19 · 899 chars · 5 min read

上一篇稍微介绍了一下,这一篇讲讲 Matcher。在 Jasmine 中,每个 Matcher 实现一个“期望值”和“实际值”的布尔判断,Jasmine 会根据 Mather 判断 expectation 是true 还是false ,然后决定 spec 是测试通过还是失败。所有 Matcher 可以通过not 执行否定判断。例如:

it('not示例', function () {
  expect(false).not.toBe(true)
})

Javascript测试框架Jasmine(一):简介

2014-06-18 · 612 chars · 4 min read

随着 javascript 程序的复杂度加深,测试的重要性越来越明显。Javascript 的测试框架有很多,例如:Jasmine,Qunit,JsTestDriver,JSUnit,Mocha 等。经过一番对比后决定使用 Jasmine。Jasmine 是一套 Javascript 行为驱动开发框架(BDD),干净简洁,表达力强且易于组织,不依赖于其他任何框架和 DOM,可运行于 Node.js,浏览器端或移动端。

下载运行

下载GitHub 上的项目。解压后,dist 下就是各个版本的独立运行包,解压最新的 2.0.0 版本,双击打开SpecRunner.html 即可运行测试,注意要在SpecRunner.html<head> 内引用 Jasmine 的 js 文件和测试文件。想简单使用的话,将soucre/spec 下的测试文件替换成你自己的即可。

编写友好的Html和CSS代码

2014-06-12 · 1,464 chars · 8 min read

Html 和 CSS 写过不少(虽然我很不喜欢写),也使用过别的同事写的和第三方库的,在使用的过程中也渐渐对 Html 和 CSS 代码的“友好度”有了点认识。UI 设计出的图片,放在不同开发手里,即使最终效果差不多,但是结构、思想、质量可能会天差地别(可以从结构的合理性,可复用程度等方面看出)。从好的代码中可以看出开发人员天马行空的想象力,扎实的代码功底,丰富的经验和奇妙的想象力,更重要的是:用着舒心。下面从代码的“可用性”上,讲讲我实际开发过程中积累的认识,很多是一些基础和细节的东西,有疑义欢迎讨论。