Попробуйте использовать тесты интеграции / запроса. Они используют веб-доступ через маршрутизацию к контроллерам.
Например:
У меня есть приложение Rails 2 в файле /spec/integration/fps_spec.rb
require 'spec_helper'
describe "FinPoradci" do
it "POST /fps.html with params" do
fp_params={:accord_id => "FP99998", :under_acc => "OM001", :first_name => "Pavel", :last_name => "Novy"}
fp_test=FinPoradce.new(fp_params)
#after create follow redirection to show
post_via_redirect "/fps", {:fp => fp_params}
response.response_code.should == 200 # => :found , not 302 :created
new_fp=assigns(:fp)
new_fp.should_not be_empty
new_fp.errors.should be_empty
flash[:error].should be_empty
flash[:notice].should_not be_empty
response.should render_template(:show)
end
end
и это работает. Пока вы не хотите отправлять заголовки (для базовой http-авторизации).
env={'HTTP_AUTHORIZATION' => ActionController::HttpAuthentication::Basic.encode_credentials(user,password)}
post_via_redirect "/fps", {:fp => fp_params}, env
подходит для создания, но после перенаправления возвращает 401 и требует новой авторизации.
Так что я должен разделить его на 2 теста: создание и показать по результату создания.