Я думаю, что проблема связана с тем, как Rspec (и инфраструктура тестирования Rails) обрабатывает контроллеры.По сложным причинам ( ОК, по причинам, которые я не понимаю ), вы не получаете настоящий ActionController при тестировании, вместо этого вы получаете экземпляр ActionView :: TestCase :: TestController.При использовании пространств имен тестовый контроллер в этом случае неправильно выводит фактический путь контроллера, поэтому он угадывает «/ users», что неверно.
Короче говоря, хотя, возможно, есть лучший способ сделать этоэто, вы можете попробовать заглушить метод контроллера, который вызывается url_for
для генерации ссылки:
it "should include link to admin page for user" do
controller.stub(:url_options).and_return(:host=>"test.host", :protocol=>"http://", :_path_segments=>{:controller=>"admin/users", :action=>"show"}, :script_name=>"")
html = helper.event_message(@event)
html.should have_selector("a", :href => admin_user_path(@user))
end