(注:文中用到的项目源码位于 [github](https://github.com/xhh/testing-rails-app-with-rspec-capybara-and-zeus)) 在某些情况下,[Cucumber](https://github.com/cucumber/cucumber-rails) 非常适合用来做验收测试。 ## 1. 在 Rails 项目中配置 Cucumber 在 *Gemfile* 中的 `test` 区域添加: ```ruby group :test do gem 'cucumber-rails', :require => false end ``` 然后执行 `bundle install `。 接下来执行 `rails generate cucumber:install` (可以先在后面加 `--help` 查看可用的选项)。 ## 2. 一个简单的测试 创建 *features/view\_posts.feature*,内容如下: # language: zh-CN @view_posts 功能: 查看文章列表   为了得到文章信息   我   可以查看文章列表   背景:     假如一共有3篇已发布的文章和1篇未发布的文章   场景: 文章列表     当我访问首页     那么我应该看到3篇已发布的文章     而且我应该看不到那篇未发布的文章 如上所示,用 Cucumber 编写的验收测试代码非常的文档化,所以一般的业务人员也可以看的懂甚至参与编写。 接下来运行 `cucumber`,提示我们需要定义一些 steps。将这些 steps 复制并粘贴到新创建的 *features/step\_definitions/view\_posts.rb*文件中,并进行修改: # encoding: utf-8 假如 /^一共有(\d+)篇已发布的文章和(\d+)篇未发布的文章$/ do |total_published, total_unpublished|   @published_posts = FactoryGirl.create_list(:post, total_published.to_i, published: true)   @unpublished_posts = FactoryGirl.create_list(:post, total_unpublished.to_i, published: false) end 当 /^我访问首页$/ do   visit root_path end 那么 /^我应该看到(\d+)篇已发布的文章$/ do |total|   @published_posts.each do |post|     page.should have_content(post.title)   end end 那么 /^我应该看不到那篇未发布的文章$/ do   @unpublished_posts.each do |post|     page.should have_no_content(post.title)   end end 再次运行 `cucumber`、修改 feature 或 steps 直至测试通过: # language: zh-CN @view_posts 功能: 查看文章列表   为了得到文章信息   我   可以查看文章列表   背景:                      # features/view_posts.feature:9     假如一共有3篇已发布的文章和1篇未发布的文章 # features/step_definitions/view_posts.rb:3   场景: 文章列表                 # features/view_posts.feature:12     当我访问首页                 # features/step_definitions/view_posts.rb:8     那么我应该看到3篇已发布的文章        # features/step_definitions/view_posts.rb:12     而且我应该看不到那篇未发布的文章       # features/step_definitions/view_posts.rb:18 1 scenario (1 passed) 4 steps (4 passed) 0m1.412s