最近花时间又将项目中的测试再次仔细地过了一遍。通过挖掘发现了几个提高测试效率的技巧,记一下。 不学习就要落后啊,Ruby 的世界进化得太快了,测试技术也是如此。
-
FactoryGirl 这个东西好用级了,之前虽然已经在项目中使用她了,但我之前还是没有完全挖掘出她的特性。对其中的 association 这个特性我是最喜欢了,让我完全不用关注关联记录的外键数据对应。想起曾经的 Rails 自带的 Fixtures,还阵阵寒,那是给人给的东西么。当应用中的数据表关联多了,再加上业务功能多了,用 Fixtures 测试绝对会折磨死人,在不同的 Fixtures 文件中穿梭,人肉拼装适合各种业务场景的数据,那真费脑细胞。而 FactoryGirl 真的是用起来称心如意啊,她不是数据的 fixture,她应该是作为一种数据的构建器 (data builder),在测试中可以让你专注去构建 测试场景的数据和写测试断言。
-
自动测试 gem: autotest. 我和同事之前商量约定好,说提交代码前一定先在本地运行一遍 rspec 测试,然后再提交。这样工作得很好。我今天研究了一下 autotest 这东西,发现真是好东西啊。它可以检测到你改动了某个文件,然后就自动地为你执行一次这个文件关联的测试。这可好了,又省了不少事。
-
接第二条,比起自动监测改动的文件自动测试,你还得关心测试的结果,更好的是有自动通知测试结果的好工具。mac 下的 growl 就是这样一个工具。autotest-growl 这样的一个 Gem 很好的做了这个事情。你再不不用切换到测试的终端窗口去查看测试结果,你只需要专心地写着代码,然后屏幕边上会自动显现一个半透明的提示框来告知测试结果(最喜欢看到就是一个绿宝石的提示框)。当然这个工具只有在 Mac OSX 上才有的。
-
测试不是很快,这个也有解决方法。Spork 就是这样的一个工具,它事先启动一个后端的 DRB 服务器(端口 8989),加载 Rails 应用的环境。然后每次 rspec 的测试可以直接与 spork 打交道,省了加载 Rails 应用环境这个比较耗时的步骤,直接运行测试用例,速度飞快。