创建测试用的数据库,我们在前面刚开始进行测试已经用过了:
depot> rake clone_structure_to_test
运行Model的测试:
rake test_units
运行controller的测试:
depot>rake test_functional
运行所有的测试,rake命令不需要带参数:
depot>rake
有时我们不想一次运行那么多测试,我们可以使用ruby自己的命令来替代:
depot>ruby test/functional/search_controller_test.rb -n test_search
也可以:
depot>ruby test/functional/search_controller_test.rb -n /search/
test_search和/search/是等价的。
当然,最好能够创建一个可以自动运行的脚本来运行测试,这样既可以充分利用机器空闲的时间,又可以保证如果你的改动引发了bug,你的测试能够及时的捕捉到。DamageControl可以帮助你完成这项工作。
使用Rake还可以对你的source进行统计,包括model和controller的数目,方法的数目,行数等,使用命令:
depot>rake stats
将得到下面的输出:
+----------------------+-------+-------+---------+---------+-----+-------+
| Name | Lines | LOC | Classes | Methods | M/C | LOC/M |
+----------------------+-------+-------+---------+---------+-----+-------+
| Controllers | 251 | 213 | 5 | 29 | 5 | 5 |
| Helpers | 14 | 13 | 0 | 1 | 0 | 11 |
| Models | 113 | 101 | 6 | 16 | 2 | 4 |
| Libraries | 0 | 0 | 0 | 0 | 0 | 0 |
| Components | 0 | 0 | 0 | 0 | 0 | 0 |
| Integration tests | 0 | 0 | 0 | 0 | 0 | 0 |
| Functional tests | 241 | 192 | 8 | 30 | 3 | 4 |
| Unit tests | 88 | 74 | 4 | 11 | 2 | 4 |
+----------------------+-------+-------+---------+---------+-----+-------+
| Total | 707 | 593 | 23 | 87 | 3 | 4 |
+----------------------+-------+-------+---------+---------+-----+-------+
Code LOC: 327 Test LOC: 266 Code to Test Ratio: 1:0.8
嗯,还不错,起码很方便。
从上面的表格中我们看到写了一些测试代码,但是,我们怎样才能保证测试的覆盖度呢?有一个工具Ruby Coverage,rails并没有包含它,使用Ruby Coverage可以生成一个html格式的报表,其中包含了测试覆盖的百分比,还能标出哪一行代码没有被测试到。
关于Ruby Coverage,可以在这里下载,下载后解压,在rails的命令行里,也就是我们常用的depot的上一级目录,依次执行命令:
ruby Z:\tools\coverage-0.2\coverage-0.2\install.rb config
ruby Z:\tools\coverage-0.2\coverage-0.2\install.rb setup
ruby Z:\tools\coverage-0.2\coverage-0.2\install.rb install
蓝色的就是coverage的安装文件,执行上面的命令后Ruby Coverage的安装就完成了,现在我们可以用它来生成测试覆盖报告,运行命令:
ruby -rcoverage test/functional/search_controller_test.rb
和我们以前的测试相比,只是添加了中间蓝色的部分,完成后,在depot目录下会有一个coverage目录,存放了生成的html文件,打开看看,覆盖到的代码会用蓝色标示,没有覆盖到的代码会以灰色表示。
本篇我们粗略的介绍了rake命令和ruby coverage,下次我们来看看性能测试。