[ruby off rails] ohm作者这两个哥们确实猛(后有rspec技巧)
花花公子
2011-02-19
他们除ohm外的部分作品
cutest - ohm教程中使用,简单的测试框架 spawn - 名字有点大众,比FactoryGirl简单的fixture生成 cuba - 这个虽然没有sinatra好看及有名,毕竟是redis.io的后台程序,也是以小巧轻量为特点。 |
|
花花公子
2011-02-19
cutest不够给力,spawn已经用上了,rspec2中的let和expect{}.to change相当不错
|
|
花花公子
2011-02-19
使用satisfy
page.should have_content description page.should have_content truncate(h content) 更新为 subject { page } it { should have_content description } it { should have_content truncate(h content) } |
|
花花公子
2011-02-20
使用spork(https://github.com/timcharper/spork)可以加速rspec测试,比如空的rails 3测试(spork就是节省了加载rails的时间而已)
没有使用spork $time rspec spec/acceptance/contact_spec.rb Finished in 0.07662 seconds 1 example, 0 failures real 0m4.314s user 0m3.770s sys 0m0.520s 使用了spork $ time rspec spec/acceptance/contact_spec.rb --drb Finished in 0.05034 seconds 1 example, 0 failures real 0m0.318s user 0m0.120s sys 0m0.080s 减肥效果如此明显!你的测试的时间都花在加载文件上而不是真正的运行上面了! |
|
night_stalker
2011-02-21
spork貌似和server模式的autotest很相似,不知道是不是也有重载没弄干净之类的问题……
|
|
花花公子
2011-02-21
night_stalker 写道 spork貌似和server模式的autotest很相似,不知道是不是也有重载没弄干净之类的问题……
目前还没有遇到过,我经常发现开发模式下i18n添加文件会需要重启,测试模式应该会用同样问题。 |
|
花花公子
2011-02-21
附带一下let和expect{}.to change的用法,比如hello_world一般神圣的测试用户登录:
一般我们会写 before { @user = User.create } it { @user.should be_normal_user } 可是那个@user看上去就不搭调,如果使用let,就可以 let(:user) { User.create } it { user.should be_normal_user } 而且let代码块一个example只运行一次。 expect{}.to change的例子也拿这个举例,我们常常这样写: user_count = User.count User.create User.count.should == user_count+1 使用了expect{}.to change以后: expect { User.create }.to change(User, :count).by(1) 现在对于属性的测试的简化还不够,比如 user.name.should == "name" user.address.should == "address" 就不方便简化 its只能作为独立的example运行,不够爽。 更新:目前看来,真要简化,就要使用its,比如stackoverflow上这篇: http://stackoverflow.com/questions/2738232/refactoring-rspec-specs 不过我今天学到的一句话是“如果你要求每段代码都达到高水准,我建议先去学点别的“(应该是指软件工程学),没必要要求自己每一段测试代码都读上去像散文一样优美。cucumber更加优美,也更加耗时间。 |
|
花花公子
2011-02-21
night_stalker 写道 spork貌似和server模式的autotest很相似,不知道是不是也有重载没弄干净之类的问题……
见 http://www.rubyinside.com/how-to-rails-3-and-rspec-2-4336.html 作者提供的方法是修改config/environments/test.rb config.cache_classes = true 改为 config.cache_classes = false |