2012-04-15 7 views
7

मैं एक तरीका है कि बेहतर रेल अनुप्रयोगों द्वारा इस्तेमाल किया जा सकता में त्सांग की कार्यक्षमता रैप करने के लिए एक पुस्तकालय लिख रहा हूँ। एक फ़ायरफ़ॉक्स प्रोफ़ाइल त्सांग का उपयोग करने के लिए कॉन्फ़िगर साथ,माणिक के अंदर एक वेब सर्वर का शुभारंभ परीक्षण

  1. लांच एक सरल वेब सर्वर
  2. रन त्सांग रिकॉर्डर पुस्तकालय के माध्यम से
  3. लांच सेलेनियम: मैं कुछ एकीकरण परीक्षणों कि नीचे निम्न के उबाल लिखना चाहते हैं प्रॉक्सी, और इस सर्वर कदम में शुरू से एक पृष्ठ पर लाने 1
  4. दर्ज की पुस्तकालय की जांच (यह मौजूद है, यह सही स्थान पर है, आदि)

चरण 1 के लिए, जबकि मैं एक लांच कर सकता है Vanil ला रेल ऐप बाहरी रूप से (उदा।, %x{rails s}), मुझे पूरा यकीन है कि परीक्षण के लिए उपयुक्त एक सरल वेब सर्वर प्रोग्रामेटिक रूप से बनाने का एक बेहतर तरीका है।

tl; डॉ - क्या एक तरह से प्रोग्राम के रूप में एक परीक्षण के अंदर एक सरल वेब सर्वर शुरू करने के लिए है?

+0

बस रैक का उपयोग ?. –

+0

@NiklasB। मैं सोच रहा था कि अच्छी तरह से काम करेगा, लेकिन मुझे एक उदाहरण खोजने में आसान समय नहीं है (रैक परीक्षण जो मैं बता सकता हूं उससे मैक्स का उपयोग करता हूं)। –

+0

एचएम, दुर्भाग्यवश मैं आपको एक न्यूनतम उदाहरण पर इंगित नहीं कर सकता, लेकिन मुझे यकीन है कि कैपिबारा इसका उपयोग अपने चश्मा के लिए करता है। Https://github.com/jnicklas/capybara/blob/master/lib/capybara/server.rb पर सर्वर कार्यान्वयन पर एक नज़र डालें और https://github.com/jnicklas/capybara/blob/master पर चश्मा /spec/server_spec.rb, वे काफी जानकारीपूर्ण हैं :) –

उत्तर

4

capybara अपनी ऐनक के लिए एक तदर्थ रैक सर्वर का उपयोग करता:

(रेल अनुप्रयोगों सहित) इस प्रणाली का उपयोग कर, हालांकि परोसा जा सकता है किसी भी रैक एप्लिकेशन रेल विन्यास थोड़ा मुश्किल हो सकता है।

+0

मैंने उत्तरदायी होने तक 'टाइमआउट.टाउटआउट (60) {@ server_thread.join (0.1) का उपयोग किया? } 'पैटर्न, और यह बहुत अच्छा काम करता है! धन्यवाद! –

9

आप अपनी खुद की सरल सर्वर रोल कर सकते हैं। यहाँ पतली और rspec का उपयोग कर एक त्वरित उदाहरण (उन जवाहरात, प्लस रैक, स्थापित किया जाना चाहिए) है:

# spec/support/test_server.rb 
require 'rubygems' 
require 'rack' 

module MyApp 
    module Test 
    class Server 
     def call(env) 
     @root = File.expand_path(File.dirname(__FILE__)) 
     path = Rack::Utils.unescape(env['PATH_INFO']) 
     path += 'index.html' if path == '/' 
     file = @root + "#{path}" 

     params = Rack::Utils.parse_nested_query(env['QUERY_STRING']) 

     if File.exists?(file) 
      [ 200, {"Content-Type" => "text/html"}, File.read(file) ] 
     else 
      [ 404, {'Content-Type' => 'text/plain'}, 'file not found' ] 
     end 
     end 
    end 
    end 
end 
तब में

अपने spec_helper:

# Include all files under spec/support 
Dir["./spec/support/**/*.rb"].each {|f| require f} 

# Start a local rack server to serve up test pages. 
@server_thread = Thread.new do 
    Rack::Handler::Thin.run MyApp::Test::Server.new, :Port => 9292 
end 
sleep(1) # wait a sec for the server to be booted 

यह किसी भी फ़ाइल है कि आप spec/support में स्टोर में काम करेगा निर्देशिका। खुद को शामिल करना सभी अनुरोधों के लिए यह वापस आ जाएगी एक 404.

यह मूलतः है क्या capybara रूप में पिछले जवाब में उल्लेख किया है, शून्य से परिष्कार का एक बहुत है।

+0

यहां एक सुरक्षा चिंता हो सकती है ... बस सुरक्षित होने के लिए मैं File.exists बदल दूंगा? लाइन: 'File.exists? (फ़ाइल) && File.dirname (फ़ाइल) == @ रूट' – etipton

1

stub_server कोई वास्तविक परीक्षण सर्वर है कि पूर्व निर्धारित उत्तरों की सेवा और ऊपर स्पिन करने के लिए आसान है सकता है ... ssl समर्थन भी साथ आता है।