Я создаю веб-приложение с Ruby on Rails 3.1 (RC1). Я использую Factory Girl, RSpec и Cucumber (вместе с Capybara) для тестирования, но неожиданно возникают ActionDispatch::ClosedError
s иногда (не каждый раз), когда я создаю новых пользователей (с помощью действия 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)
Ошибка возникает при использовании этих способов создания пользователей:
- Creation using Factory Girl
Factory.create( :user )
Factory.build( :user ).save
- Basic creation
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
Однако ошибка не возникает в следующем блоке кода:
description 'GET edit' do it 'назначает запрошенного пользователя как @user' do get :edit, id: user.id # Это не вызывает ошибок assigns[ :user ].should == user end end
Любой другой метод ниже этого не вызывает ошибку, хотя я создаю пользователей точно так же.
Буду очень признателен за любые предложения о том, что я могу делать неправильно!