测试 使用 RSpec + Capybara 简单 BDD 入门 -目录

blueplanet · 发布于 2013年1月05日 · 最后由 blueplanet 回复于 2013年4月11日 · 9383 次阅读
2650

前提

  • 我也是个Rails初学者,文中可能会有考虑不周或者错误的地方,希望大家多指正,共同进步
  • 计划是使用RSpec+Capybara写 features 测试+简单的单元测试,并不是完全的BDD,是一个简略版本

缘起

  • 前段时间刚看完了 The RSpec Book之后对BDD特别感兴趣,尝试了一下 cucumber 但不是很顺利就暂时放下了
  • 之后有幸参加了的社区最高楼 @knwang 周四晚现场编程网上演示 面向新手的现场演示,被从外至内的理念震撼了 视频在这里
  • @knwang 在交流时间里说过,实际项目开发的时候,会使用TDD/BDD进行开发,但基本的从外至内的理念是不变的,于是参加活动之后,先是按照 @knwang 的演示步骤自己动手做了几遍,觉得收获非常大,如果能够把RSpec加进去的话应该更完美。
  • 最近又学到了RSpec写features的方法,于是决定使用 RSpec+Capybara来把 @knwang 的步骤重新做一遍,顺便把这个过程记录下来,希望能够对其他人有所帮助

计划

  • 完全按照 @knwang 的步骤,重写一遍 Ruby China Clone
  • 使用RSpec+Capybara 编写测试
  • 每个步骤新开一个帖子,这个帖子作为目录。步骤完成后把新帖子链接加到这个帖子里
  • @knwang 的步骤翻译成了中文。由于英文水平很低,并且用户故事的写法也不是很熟练,可能看起来比较生硬,请见谅

步骤

  1. 访问者希望看到所有帖子的列表
  2. 访问者希望看到帖子的节点
  3. 访问者希望看到一个节点的帖子列表
  4. 访问者希望看到帖子的详细信息
  5. 访问者希望看到用户的信息
  6. 访问者希望注册用户
  7. 访问者希望登录
  8. 用户希望发布新帖
  9. 用户希望看到帖子的回复列表
  10. 用户希望看到最新回复的信息
  11. 用户希望对帖子进行回复

可能出现的问题

无法退出。按照下面的步骤实现即可

编辑controllers/sessions_controller.rb,增加destroy方法

def destroy
  session[:user_name] = nil
  redirect_to root_path
end

编辑layouts/application.html.haml,修改第26行的链接

= link_to "退出", sign_out_path

编辑conf/routes.rb,增加路由信息

match 'sign_out', to: "sessions#destroy"

在使用rails server后启动浏览器进行测试的时候没有Node

  • 由于是示范项目,所以并没有把所有功能做完
  • 可以在rails console里面加上几个就可以了

起步

本地开发步骤

git clone https://gitcafe.com/blueplanet/ruby_china_clone.git
cd ruby_china_clone
git checkout master
git checkout -b dev # 创建dev分支
  • 启动自动测试环境
bundle install --without production # 只安装开发环境和测试环境需要的gem
bundle exec guard

执行之后如果出现下面的提示,说明环境没问题了

Finished in 0.00856 seconds 
0 examples, 0 failures           
Randomized with seed 26104    
Done.  
17:00:57 - INFO - Guard is now watching at ....
[1] guard(main)> 

以后的步骤中,新建或者保存 spec 文件之后,会自动执行对应的测试

先把坑挖好,慢慢填上!

感想

  • 真正动手很重要
    • 实际花费时间:写帖子20小时左右,之前的练习和调查也至少是这个数字
    • 这40个小时,感觉是进步最大最快的40个小时。所以,不能只顾看书,动手才是真的!
  • 实际开发很复杂
    • 由于示范的侧重点不同,实际上回避了两个比较大的问题。一是UI设计,二是用户故事的写法。
    • 实际上如果自己做项目,最先遇到的就是这两个问题。至少我是撞得够呛,呵呵。计划下个阶段摸索一下这两个方面。

最后,再次感谢 @knwang 的演示!

共收到 13 条回复
1楼 已删除
439
40hood · #2 · 2013年1月16日

@blueplanet 我觉得 8.用户希望公开帖子 改为 用户希望发布新帖 更妥帖

96
denny2trasy · #3 · 2013年1月16日

能看懂,不见得能写代码;能写代码,不见得能写技术文章;需要不断的积累和锻炼! 学到一点知识,能把它用文章表达出来真的不容易!

2650
blueplanet · #4 · 2013年1月17日

#2楼 @40hood 有道理,我改一下!谢谢!

2650
blueplanet · #5 · 2013年1月17日

#3楼 @denny2trasy 过奖了

96
jefffreylam · #6 · 2013年1月31日

mark mark

96
ysihaoy · #7 · 2013年2月03日

非常不错啊,很好,不过lz说的kevin的演示网上是否还有视频啊?

我也准备练练TDD

96
ysihaoy · #9 · 2013年2月05日

#8楼 @chankaward 感谢,后来自己也找到了,呵呵

96
sanye · #10 · 2013年2月05日

很用心,加油。

96
Azon · #11 · 2013年2月05日

先标记一下,然后照着学

4215
chenge · #12 · 2013年4月10日

git clone https://gitcafe.com/blueplanet/ruby_china_clone, 末尾需要加.git

2650
blueplanet · #13 · 2013年4月11日

#12楼 @chenge 确实需要.git,非常感谢!已经修改了。

2650 blueplanet 使用 RSpec+Capybara 简单 BDD 入门 -11 中提及了此贴 12月19日 15:16
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册