Если только вы :user_settings
фабрика не ссылаетесь на себя, я бы посмотрел на две вещи. Первый:
describe UserSettingsController do
describe 'PUT "update"' do
let(:proxy) { double('proxy').as_null_object }
let(:user) { Fabricate :user }
before(:each) do
login_user(user)
end
it 'updates the User with the correct attributes' do
controller.should_receive(:current_user).any_number_of_times { proxy }
attributes = Fabricate(:user_settings).stringify_keys
proxy.should_receive(:update_attributes).with(attributes, :as => :updater) { true }
put :update, :user => attributes
end
end
end
Если это не так, как раньше, вы знаете, что проблема где-то внутри колдовства. (Вы никогда не увидите пример вывода итоговой строки в своей консоли.) Обратите внимание, что я сохранил вызов #as_null_object
: колдовство будет подталкивать смоделированного пользователя к информации, в основном заполняя хэши. Начните читать здесь , если вам интересно. Если , что не поможет точно определить проблему, рассмотрите возможность полного удаления login_user
. Вот так:
describe UserSettingsController do
describe 'PUT "update"' do
let(:proxy) { double('proxy') }
let(:user) { Fabricate :user }
it 'updates the User with the correct attributes' do
controller.should_receive(:current_user).any_number_of_times { proxy }
attributes = Fabricate(:user_settings).stringify_keys
proxy.should_receive(:update_attributes).with(attributes, :as => :updater) { true }
put :update, :user => attributes
end
end
end
Вы заглушаете current_user
, чтобы быть определенным контроллером, который, как я думаю, будет , будет означать, что вы пропустите свой хук before_filter auth, определив current_user
как proxy
. Если во всех вызовах происходит что-то глупое, вы, по крайней мере, сокращаете их количество.
Я все еще догадываюсь - я не создавал пример приложения. Удачи.