如何通过Nginx服务器+ Thin on Rails运行集成测试

时间:2016-02-22 21:38:12

标签: ruby-on-rails ruby testing nginx

我有一个Rails 4集成测试,正在我说话时正在运行和传递。它在Ruby Thin服务器上运行。现在,我已经配置了代理所有请求的Nginx服务器,我希望我的集成测试指向Nginx服务器并运行,因为它们将直接在Thin服务器上运行。

使用以下命令运行集成测试:

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

1 个答案:

答案 0 :(得分: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_NAMEDEFAULT_HOST的定义会产生相同的效果(请参阅the code),例如:

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