Попробуй заглянуть найти?
mock_user = User.stub(:find).with(@user.id) {@user}
Честно говоря, я бы пошел дальше и убедился, что вы высмеиваете и заглушаете большую часть соответствующего поведения объекта User (или любого другого класса @user). Имейте в виду, что вы тестируете только то, что действие контроллера возвращает то, что вы ожидаете, если вы дадите ему верный ввод, а не то, что сама модель делает правильные вещи.
У меня было много трудностей, чтобы обернуть голову в различия между спецификациями модели и контроллера ...
Надеюсь, это поможет ... если нет, заранее прошу прощения ...
EDIT:
Я сделаю еще один шаг и предположу, что этот тест на самом деле является модельным тестом. Реальный тест контроллера будет выглядеть примерно так, как должен вести себя ваш тест спецификации:
it "should NOT update user with invalid input" do
mock_user = mock_model(User, {}).as_null_object
User.stub(:find).with("12") {mock_user}
User.stub(:update_attributes).with({}).and_return(false)
put 'update', :id => "12"
# test that your output is correct, or even if the render target is what you expect.
end