我有一个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
答案 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_NAME
或DEFAULT_HOST
的定义会产生相同的效果(请参阅the code),例如:
ENV['SERVER_NAME'] = 'www-mynginx-server.com'