3

我是一名初学者,正在学习 Ruby on Rails,但在让我的测试正常工作时遇到了问题。我正在使用 rspec 和 capybara。问题是 Capybara 没有呈现页面或没有进入正确的页面。当我执行时,该页面在浏览器中正确打开: $rails s。但是当我用 save_and_open_page 测试时,html 是空的。

我的规格

以下是我的第一个 PagesController 规范:

 require 'spec_helper'

describe PagesController do
describe "GET 'home'" do
    it "returns http success" do
      visit pages_home_path
      save_and_open_page #at this point it opens the a blank html page
    end
  end
end

我的控制器规格,这将打开一个空白页面。

我为 Pagescontroller 规范尝试了另一种语法:

require 'spec_helper'

describe PagesController do

  describe "GET 'home'" do
    it "returns http success" do
       get :home           
       response.should render_template('home')
       response.should have_content("home") #it fails here
     end
  end
end

这在控制台失败中显示以下错误:

1) PagesController GET 'home' 返回 http 成功失败/错误:response.should have_content("home") 期望在 "#" 中有文本 "home" # ./spec/controllers/pages_controller_spec.rb:10:in ` '中的块(3个级别)

在 1.91 秒内完成 1 个示例,1 个失败

其他配置:

在 spec_helper 我添加了以下行,其余部分保持不变。

require 'capybara/rspec'

*宝石文件:*

    gem 'rails', '3.1.0'
    group :development, :test do
              gem 'autotest-rails'
      gem 'sqlite3'
      gem 'ruby-debug19', :require => 'ruby-debug'
      gem 'cucumber-rails', :require => false
      gem 'cucumber-rails-training-wheels'
      gem 'database_cleaner'
      gem 'capybara'
      gem 'launchy'
      gem 'rspec-rails'
      gem 'simplecov'
      gem 'rspec-core', '2.8.0'
    end
    group :assets do
      gem 'therubyracer'              
      gem 'sass-rails', "  ~> 3.1.0"
      gem 'coffee-rails', "~> 3.1.0"
      gem 'uglifier'
    end

    gem 'jquery-rails'
    gem 'haml'

我还没有安装 Webrat 并验证它不在我的 Gem 列表中。谢谢您的帮助。

4

2 回答 2

2

文档看来,您应该将规范标记为feature或将它们放入spec/features文件夹中。

对我来说,您似乎具有控制器测试的默认行为,即渲染任何内容。您可以覆盖它,但我认为将集成测试与控制器测试分开会更好。

于 2012-11-26T19:49:48.563 回答
0

听起来您的第二个测试正在发出请求并且找不到内容,因为内容不在“response”中,而是在“response.body”中,请尝试如下:

it "returns http success" do
   get :home           
   response.should render_template('home')
   response.body.should have_content("home") 
 end
于 2012-11-26T12:32:24.410 回答