首页 文章

Capybara和Rspec . Capybara在Test中没有渲染页面,在rails中使用visit或get方法

提问于
浏览
3

我是初学者,学习Ruby on Rails,我有一个问题让我的测试工作 . 我使用rspec和水豚 . 问题是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”)期望在“#”#./spec/controllers/pages_controller_spec.rb:10:in中有文本“home” . 阻止(3级)'

完成1.91秒1例,1次失败

Other Configurations:

在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列表中验证了它 . 谢谢您的帮助 .

2 回答

  • 2

    documentation看来,您应该将您的规格标记为 feature 或将它们放入 spec/features 文件夹中 .

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

  • 0

    听起来你的第二个测试是发出请求而无法找到内容,因为内容不是“响应”,而是在“response.body”中,尝试这样:

    it "returns http success" do
       get :home           
       response.should render_template('home')
       response.body.should have_content("home") 
     end
    

相关问题