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

blueplanet · 2013年01月05日 · 最后由 blueplanet 回复于 2013年04月11日 · 14679 次阅读

前提

  • 我也是个 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 的演示!

1 楼 已删除

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

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

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

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

我也准备练练 TDD

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

很用心,加油。

先标记一下,然后照着学

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

blueplanet 使用 RSpec+Capybara 简单 BDD 入门 -11 提及了此话题。 12月19日 15:16
blueplanet 使用 RSpec+Capybara 简单 BDD 入门 -8 提及了此话题。 04月10日 10:20
blueplanet 使用 RSpec+Capybara 简单 BDD 入门 -1 提及了此话题。 04月03日 10:56
blueplanet 使用 RSpec+Capybara 简单 BDD 入门 -2 提及了此话题。 04月03日 10:56
blueplanet 使用 RSpec+Capybara 简单 BDD 入门 -3 提及了此话题。 04月03日 10:56
blueplanet 使用 RSpec+Capybara 简单 BDD 入门 -5 提及了此话题。 04月03日 10:56
blueplanet 使用 RSpec+Capybara 简单 BDD 入门 -4 提及了此话题。 04月03日 10:56
blueplanet 使用 RSpec+Capybara 简单 BDD 入门 -6 提及了此话题。 04月03日 10:56
blueplanet 使用 RSpec+Capybara 简单 BDD 入门 -7 提及了此话题。 04月03日 10:56
blueplanet 使用 RSpec+Capybara 简单 BDD 入门 -10 提及了此话题。 04月03日 10:56
blueplanet 使用 RSpec+Capybara 简单 BDD 入门 -9 提及了此话题。 04月03日 10:56
需要 登录 后方可回复, 如果你还没有账号请 注册新账号