Получение пустой страницы при запуске тестов RSpec для get 'new' - PullRequest
6 голосов
/ 23 февраля 2012

Я получаю пустую страницу в качестве ответа при выполнении следующего теста 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.С пустой страницей я имею в виду, что нет другого содержимого HTML, кроме объявления DOCTYPE.

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

Интересно, что тесты RSpec для post 'create' работают нормально.Любые советы?

Я использую Rails 3.2 с spec-rails, огурцом и капибарой (вместо webrat).

Ответы [ 2 ]

8 голосов
/ 10 января 2013

Я смог решить эту проблему, добавив в свой файл 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

6 голосов
/ 26 апреля 2012

Проблема в том, что вы смешиваете типы тестов. Capybara, которая предоставляет объект page, используется в спецификации запроса путем вызова visit path.

Чтобы решить вашу проблему, вам нужно смотреть на объект response вместо объекта page.

Если вы хотите протестировать контент с помощью капибары, то способ, которым вы будете строить этот тест, будет выглядеть примерно так:

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")

Этот код должен быть помещен в спецификацию запроса вместо спецификации контроллера, по соглашению.

...