获取“新”时运行RSpec测试时获取空白页

时间:2012-02-23 19:50:32

标签: rspec capybara

运行以下RSpec测试时,我得到一个空页作为响应:

require 'spec_helper'

describe FriendshipsController do
  include Devise::TestHelpers
  render_views

  before(:each) do
    @user = User.create!(:email => "max@mustermann.com", :password => "mustermann", :password_confirmation => "mustermann")
    @friend = User.create!(:email => "john@doe.com", :password => "password", :password_confirmation => "password")    
    sign_in @user
  end  

  describe "GET 'new'" do

    it "should be successful" do
      get 'new', :user_id => @user.id
      response.should be_success
    end

    it "should show all registered users on Friendslend, except the logged in user" do
      get 'new', :user_id => @user.id

      page.should have_select("Add new friend")
      page.should have_content("div.users")
      page.should have_selector("div.users li", :count => 1)
    end

    it "should not contain the logged in user" do
      get 'new', :user_id => @user.id
      response.should_not have_content(@user.email)
    end
  end
end

运行RSpec测试时,我只得到一个空白页面。 对于空白页,我的意思是除了DOCTYPE声明之外没有其他HTML内容。

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

有趣的是,RSpec测试后'创建'工作正常。任何提示?

我正在使用Rails 3.2和spec-rails,黄瓜和水豚(而不是webrat)。

2 个答案:

答案 0 :(得分:8)

我能够通过在spec_helper.rb文件中添加以下内容来解决这个问题:

RSpec.configure do |config|
  config.render_views
end

您可以选择单独调用每个控制器规范中的render_views

https://github.com/rspec/rspec-rails/blob/master/features/controller_specs/render_views.feature

答案 1 :(得分:6)

问题是你正在混合各种类型的测试。提供page对象的Capybara通过调用visit path在请求规范中使用。

为了解决您的问题,您需要查看response对象而不是page对象。

如果你想用capybara测试内容,那么构建测试的方式将如下所示:

visit new_user_session_path
fill_in "Email", :with => @user.email
fill_in "Password", :with => @user.password
click_button "Sign in"
visit new_friendships_path(:user_id => @user.id)
page.should have_content("Add new friend")

按照惯例,该代码应放在请求规范而不是控制器规范中。