运行以下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)。
答案 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")
按照惯例,该代码应放在请求规范而不是控制器规范中。