上一篇是 Grunt 运行 Jasmine 测试用例: grunt-contrib-jasmine-实例,本篇叫做示例。其竟在于对 grunt-contrib-jasmine-example 的简单的窥探,进而自己的项目中可以如何如何。
如果剔除该项目的几个外围文件,就只下面的结构了
1 2 3 4 5 6 7 8 |
├── Gruntfile.js ├── package.json ├── spec │ ├── PlayerSpec.js │ └── SpecHelper.js └── src ├── Player.js └── Song.js |
这算是一个最简单的 Jasmine 项目布局了。各位可以自己去查看上面的 Gruntfile.js
和 package.json
的内容,我这里自己来亲自打造一个比这还更简单的项目来,把原来的 jshint 任务也拿掉了。
1. 首先创建项目目录 TestJasmine
2. 在其中创建 package.json
文件,内容基本不能再节俭了
1 2 3 4 |
{ "name": "TestJasmine", "version": "0.1.0" } |
3. 加入 grunt-contrib-jasmine
依赖,通过运行 npm install grunt-contrib-jasmine --save-dev
, 这时候 package.json 中的内容变成
1 2 3 4 5 6 7 |
{ "name": "TestJasmine", "version" : "0.1.0", "devDependencies": { "grunt-contrib-jasmine": "~0.6.3" } } |
4. 创建 Gruntfile.js 文件,不需要单独运行 npm install
命令了,Gruntfile.js 的内容
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
module.exports = function(grunt) { 'use strict'; // Project configuration. grunt.initConfig({ jasmine : { src : 'src/**/*.js', options : { specs : 'spec/**/*.js', keepRunner: true } } }); grunt.loadNpmTasks('grunt-contrib-jasmine'); grunt.registerTask('test', ['jasmine']); grunt.registerTask('default', ['test']); }; |
现在 Gruntfile.js 和 package.json 都有了,就差实际的项目文件了。这里继续发扬一切从俭的原则,坚决不让火葬比土葬的成本还高,对大自然造成的危害更大。
5. 创建待测试代码 src/Animals.js,内容为
1 2 |
var panda = 'happy'; var bear = 'sad'; |
6. 创建 spec/AnimalsSpec.js, 内容为
1 2 3 4 5 6 7 8 9 |
describe('Animals',function(){ it('Panda is happy',function(){ expect(panda).toBe('happy'); }); it('Bear is happy like the panda',function(){ expect(bear).toBe('happy'); }); }); |
至于 Jasmine 的 Spec 怎么写这里就不作交待了,模式就是 describe..it..expect..toBeXxx(),能够作什么样的断言请查找 Jasmine 相关资料 http://jasmine.github.io/2.0/introduction.html。
7. 运行 grunt test,结果如下
这里一个 Warning: Task "jasmine:src" failed, 尚不知为何。
总之现在测试有失败的,我们打开生成的 _SpecRunner.html 来看看
首先展示出的是错误用例的页面,可以切到 Spec List 页面
我们也可以在生成的 _SpecRunner.html 中直接运行测试用例,修改测试后,刷新页面会运行所有的测试,点击 Animals 这个 Spec 就会重跑 Animals 这里的测试。
接下来就是它怎么与持续构建工具,如 Jenkins 怎么集成的问题。还有怎么生成测试覆盖报告,这可以用 istanbul 这个工具,也能与 Jasmine 联结起来,通过 https://github.com/maenu/grunt-template-jasmine-istanbul。
参考:1. https://github.com/gruntjs/grunt-contrib-jasmine
2. https://github.com/jsoverson/grunt-contrib-jasmine-example
3. https://github.com/jasmine-contrib/grunt-jasmine-runner
4. https://github.com/maenu/grunt-template-jasmine-istanbul
5. https://github.com/gotwarlost/istanbul
6. Run all your JavaScript Jasmine tests on every commit