2016-02-22 4 views
1

У меня есть интеграционный тест Rails 4, который работает и проходит, когда я говорю. Он работает на сервере Ruby Thin. Теперь я настроил сервер Nginx, который проксирует все запросы, и я хочу, чтобы мой интеграционный тест указывал на сервер Nginx и запускался так, как они будут запускаться непосредственно на сервере Thin.Как выполнить интеграционные тесты против сервера Nginx + Thin on Rails

Тест интеграции побежал с помощью следующей команды:

rake test:integration TEST=test/integration/login_test.rb 

Как настроить свои интеграционные тесты, чтобы они могли работать и передавать с Nginx действуя в качестве обработчика запросов прокси-сервер?

сервер
Old: Integration Test -> Thin Server     (TESTS PASSING FINE !!!!) 
New: Integration Test -> Nginx Server -> Thin Server (HOW TO CONFIGURE TESTS ????) 

Мои Nginx уже и работает с именем: www-mynginx-server.com

login_test.rb

require 'test_helper' 

class LoginTest < ActionDispatch::IntegrationTest 

    setup do 
    @user = users(:admin) 
    end 

    test "login page is displayed on root path" do 
    delete '/signout' 
    get root_path 
    assert redirect? 
    assert_redirected_to '/signin' 
    follow_redirect! 
    assert_template :new 
    assert_template %r{\Adevise/sessions/new\Z} 
    assert_select "a[href=?]", users_path, count: 0 
    assert_select "input[id=?]", 'user_email', count: 1 
    assert_select "input[id=?]", 'user_password', count: 1 
    assert_select "input[value=?]", 'Log in', count: 1 
    end 

end 

ответ

0

Просто создать сайт в Nginx (вероятно /etc/nginx/sites-available/mysite - зависит от вашей операционной системы) , с прокси (минимальная конфигурация):

server { 
     listen 80;  
     server_name _; 

     location/{  
     proxy_set_header X-Forwarded-Proto $scheme; 
     proxy_set_header Host    $http_host; 
     proxy_set_header X-Real-IP   $remote_addr; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     # replace your thin server port 
     proxy_pass http://127.0.0.1:3040; 
     } 
} 

Включить сайт:

ln -s /etc/nginx/sites-available/mysite /etc/nginx/sites-enabled/mysite 

и перезагрузить Nginx:

/etc/init.d/nginx reload 

Есть много способов, как изменить имя сервера. Для интеграционного теста у вас есть несколько helpers, то используйте host! для изменения сервера URI каждого запроса:

class LoginTest < ActionDispatch::IntegrationTest 
    setup do 
    host! 'www-mynginx-server.com' 
    #... 
    end 
    # ... 
end 

или spec_helper.rb изменения по умолчанию:

before(:each) do 
    default_url_options[:host] = 'www-mynginx-server.com' 
end 

или определение переменной окружения SERVER_NAME или DEFAULT_HOST бы имеют такой же эффект (см. the code), например:

ENV['SERVER_NAME'] = 'www-mynginx-server.com' 
+0

T ombart - у меня уже есть приложение, развернутое и доступное с помощью как автономного Tiny сервера, так и Nginx + Tiny. Так работают 'http: //10.0.2.15: 3000/signin' и' www-mynginx-server.com/sigin'. Я хочу знать, какие изменения конфигурации мне нужно сделать в моей конфигурации тестов Rails, чтобы он мог интерпретировать и удалять сервер Nginx. – user2325154

+0

@ user2325154 Извините, я не обратил на это внимания. Я обновил ответ, если вы хотите это только для теста интеграции, я бы выбрал первый вариант. – Tombart

+0

@ Tom- Спасибо за обновление. Я указал 'host! 'www-mynginx-server.com'' в моем файле 'test_helper.rb', и я получил следующее сообщение об ошибке, когда я запустил тест' NoMethodError: undefined method 'host!' для ActiveSupport :: TestCase: Class' – user2325154

Смежные вопросы