2012-05-09 10 views
6

Trình trợ giúp url (ví dụ: root_url) trả về tên máy chủ khác trong bộ điều khiển ứng dụng và ví dụ về rspec. Tôi đã thành công có thể thiết lập tên miền cho những người giúp đỡ url trong đường ray của tôi ứng dụng như này:Đường ray: Tên máy chủ lưu trữ cho người trợ giúp url trong rspec

class ApplicationController < ActionController::Base 
    def default_url_options 
    {host: "foo.com", only_path: false} 
    end 
end 

Ví dụ, kết quả đầu ra root_url "http://foo.com/" trong ứng dụng nhưng "http://example.com "trong thông số yêu cầu của tôi. Cách được khuyến nghị để áp dụng các tùy chọn url đó trên toàn cầu trong đường ray 3.2 để chúng ảnh hưởng đến thông số kỹ thuật của tôi là gì? Tùy chọn url không cần phải động.

Trả lời

4

Trong thông số kỹ thuật Tính năng, chủ nhà! đã không được chấp nhận. Thêm những để rspec_helper.rb của bạn:

# Configure Capybara expected host 
Capybara.app_host = 'http://lvh.me:3000' 

# Configure actual routes host during test 
before(:each) do 
    if respond_to?(:default_url_options) 
    default_url_options[:host] = 'http://lvh.me:3000' 
    end 
end 
+0

FYI, điều này không thành công nếu kiểm tra không phải là bộ điều khiển/yêu cầu/tính năng. Ví dụ về trình trợ giúp của trình trợ giúp không thành công với 'biến cục bộ không xác định hoặc phương thức default_url_options''. – typeoneerror

2

Bạn có thể đặt các máy chủ trong một trước khi khối trong thử nghiệm của bạn trong rspec:

before :each do 
     host! 'hostgoeshere.com' 
    end 

Nếu bạn muốn thiết lập nó trên toàn cầu bạn có thể đặt một cái gì đó tập tin spec_helper.rb của bạn.

+0

bạn có thể cụ thể hơn về những gì mà "cái gì đó" might được? – denishaskin

4

Chỉ cần để thêm vào câu trả lời của Dan nó sẽ giống như thế này trong spec_helper.rb

RSpec.configure do |config| 
    # other config options 
    config.before(:each) do 
    host! "localhost:3000" 
    end 
end 
+0

Không hoạt động đối với tôi trong spec_helper: NoMethodError: phương thức undefined 'host! '. Tôi đang sử dụng Rspec 3.2. –

0

Tôi đã thử nhiều biến thể của @request.host, host!, và post path, args, {'SERVER_NAME' => my_secret_domain} nhưng không thành công, cả hai như là kiểm tra bộ điều khiển và kiểm tra tính năng. Rất trầm trọng, như nhiều người khác đã báo cáo thành công với những cách tiếp cận đó.

Các giải pháp đối với tôi là:

request.headers["SERVER_NAME"] = my_secret_domain 
post path, args 

Tôi đang chạy ruby ​​2.1.5p273, rspec 3.1.7 và Rails 4.2.0