document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/pygment_trac.css" />');
document.write('<link rel="stylesheet" href="http://flowcoder.com/stylesheets/embed.css" />');
document.write('<div class="flowcoder_post flowcoder_clearfix">');
document.write('<div class="flowcoder_posttitle"><a href=\"http://flowcoder.com/90\">Using Rack::Test to test the entire app stack as defined in config.ru<\/a></div>');
document.write('<div class="flowcoder_postbody flowcoder_syntax"><div class=\"highlight\"><pre><span class=\"c1\"># Rack::Test requires you to return an app object from the #app method in your test case.<\/span>\n<span class=\"c1\"># If you want to test one app in isolation, you just return that app, but if you want<\/span>\n<span class=\"c1\"># to test the entire app stack, including middlewares, cascades etc. you need to parse<\/span>\n<span class=\"c1\"># the app defined in config.ru.<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\"># With the latest Rack version 1.1.0, you can use Rack::Builder.parse_file to return the<\/span>\n<span class=\"c1\"># outer app; with older Rack versions, you&#39;ll need to do the evaling yourself, like so:<\/span>\n<span class=\"c1\">#<\/span>\n<span class=\"c1\">#   OUTER_APP = eval(&quot;Rack::Builder.new {( &quot; + ::File.read(&#39;config.ru&#39;) + &quot;\\n )}.to_app&quot;)<\/span>\n\n<span class=\"no\">OUTER_APP<\/span> <span class=\"o\">=<\/span> <span class=\"no\">Rack<\/span><span class=\"o\">::<\/span><span class=\"no\">Builder<\/span><span class=\"o\">.<\/span><span class=\"n\">parse_file<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#39;config.ru&#39;<\/span><span class=\"p\">)<\/span><span class=\"o\">.<\/span><span class=\"n\">first<\/span>\n\n<span class=\"k\">class<\/span> <span class=\"nc\">TestApp<\/span> <span class=\"o\">&lt;<\/span> <span class=\"no\">Test<\/span><span class=\"o\">::<\/span><span class=\"no\">Unit<\/span><span class=\"o\">::<\/span><span class=\"no\">TestCase<\/span>\n  <span class=\"kp\">include<\/span> <span class=\"no\">Rack<\/span><span class=\"o\">::<\/span><span class=\"no\">Test<\/span><span class=\"o\">::<\/span><span class=\"no\">Methods<\/span>\n  \n  <span class=\"k\">def<\/span> <span class=\"nf\">app<\/span>\n    <span class=\"no\">OUTER_APP<\/span>\n  <span class=\"k\">end<\/span>\n  \n  <span class=\"k\">def<\/span> <span class=\"nf\">test_root<\/span>\n    <span class=\"n\">get<\/span> <span class=\"s1\">&#39;/&#39;<\/span>\n    <span class=\"n\">assert<\/span> <span class=\"n\">last_response<\/span><span class=\"o\">.<\/span><span class=\"n\">ok?<\/span>\n  <span class=\"k\">end<\/span>\n<span class=\"k\">end<\/span>\n<\/pre><\/div>\n</div>');
document.write('<div class="flowcoder_bottombar flowcoder_clearfix">');
document.write('<div class="flowcoder_postedby">Posted by <a href=\"http://flowcoder.com/gbuesing\">gbuesing<\/a> on <a href=\"http://flowcoder.com/\">Flowcoder<\/a></div>');
document.write('<div class="flowcoder_viewraw"><a href=\"http://flowcoder.com/90.txt\">view raw<\/a></div>');
document.write('</div></div>');
