Я создаю веб-приложение с Ruby on Rails 3.1 (RC1). Я использую Factory Girl , RSpec и Огурец (с Капибара ) для тестирования, но я испытываю неожиданные повышения ActionDispatch::ClosedError
с иногда (не каждый раз), когда я создаю новых пользователей (с помощью действия create модели User). Ниже приведено сообщение об ошибке, которое я получаю:
Cannot modify cookies because it was closed. This means it was already streamed
back to the client or converted to HTTP headers. (ActionDispatch::ClosedError)
Ошибка возникает при использовании этих способов создания пользователей:
- Создание с использованием Factory Girl
Factory.create( :user )
Factory.build( :user ).save
- Основное творение
User.create( { ... } )
User.new( { ... } ).save
Что забавно, так это то, что они работают во время одного теста, но не в других, и это не кажется случайным, хотя я не могу понять причину. Ниже приведена выдержка из моего кода:
users_controller_spec.rb
требуется 'spec_helper'
def user
@user ||= Factory.create( :user )
end
def valid_attributes
Factory.attributes_for :user
end
describe UsersController do
describe 'GET index' do
it 'assigns all users as @users' do
users = [ user ] # The call to user() raises the error here
get :index
assigns[ :users ].should == users
end
end
describe 'GET show' do
it 'assigns the requested user as @user' do
get :show, id: user.id # The call to user() raises the error here
assigns[ :user ].should == user
end
end
Однако ошибка не возникает в следующем блоке кода:
описать "ПОЛУЧИТЬ редактировать" сделать
он 'назначает запрошенного пользователя как @user' do
get: edit, id: user.id # Это не вызывает ошибки
назначает [: user] .should == пользователь
конец
конец
Любой другой метод ниже этого не вызывает ошибку, хотя я создаю пользователей точно таким же образом.
Буду очень признателен за любые предположения о том, что я могу сделать неправильно!