Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Newer
Older
100644 351 lines (252 sloc) 9.503 kb
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
1 ---
4e899bf @rtomayko Link to Testing doc again and tidy up notes about deprecation
rtomayko authored
2 title: Testing Sinatra with Rack::Test
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
3 layout: default
8c053f5 @rtomayko Minor spelling edits
rtomayko authored
4 id: testing
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
5 ---
6
4e899bf @rtomayko Link to Testing doc again and tidy up notes about deprecation
rtomayko authored
7 Testing Sinatra with Rack::Test
8 ===============================
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
9
a1bc6ab @randomecho Cull footnote links either not used or no longer there
randomecho authored
10 All examples in the following sections assume that [`Test::Unit`][Test::Unit] is being
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
11 used in an attempt to be as general as possible. See the [Test Framework
4e899bf @rtomayko Link to Testing doc again and tidy up notes about deprecation
rtomayko authored
12 Examples](#frameworks) for information on using the test helpers in
09e8294 @mrchrisadams Added some info about installing rack-test to make examples work
mrchrisadams authored
13 other testing environments. To use `Rack::Test` library used when you require `rack/test`, you'll need to install the `rack-test` gem.
14
15 gem install rack-test
16
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
17
18 Example App: `hello_world.rb`
19 -----------------------------
20
21 The following example app is used to illustrate testing features. This is
22 assumed to be in a file named `hello_world.rb`:
23
24 require 'sinatra'
25
26 get '/' do
f465dd7 @sr Fix hello world test example
sr authored
27 "Hello World #{params[:name]}".strip
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
28 end
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
29
4d1d10e @tannerburson Add info about using Rack::Test without the mixin, as well as fix a
tannerburson authored
30 Using The `Rack::Test::Methods` Mixin
4e899bf @rtomayko Link to Testing doc again and tidy up notes about deprecation
rtomayko authored
31 -------------------------------------
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
32
4d1d10e @tannerburson Add info about using Rack::Test without the mixin, as well as fix a
tannerburson authored
33 The `Rack::Test::Methods` module includes a variety of helper methods for
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
34 simulating requests against an application and asserting expectations about
35 the response. It's typically included directly within the test context and
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
36 makes a few helper methods and attributes available.
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
37
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
38 The following is a simple example that ensures the hello world app functions
39 properly:
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
40
783c236 @frodsan Encourage `RACK_ENV=test` environment variable setup instead of `set :en...
frodsan authored
41 ENV['RACK_ENV'] = 'test'
42
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
43 require 'hello_world'
44 require 'test/unit'
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
45 require 'rack/test'
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
46
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
47 class HelloWorldTest < Test::Unit::TestCase
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
48 include Rack::Test::Methods
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
49
86f6eb3 @tannerburson Mention that you have to return Sinatra::Application from def app
tannerburson authored
50 def app
51 Sinatra::Application
52 end
53
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
54 def test_it_says_hello_world
55 get '/'
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
56 assert last_response.ok?
57 assert_equal 'Hello World', last_response.body
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
58 end
59
60 def test_it_says_hello_to_a_person
61 get '/', :name => 'Simon'
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
62 assert last_response.body.include?('Simon')
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
63 end
64 end
65
4d1d10e @tannerburson Add info about using Rack::Test without the mixin, as well as fix a
tannerburson authored
66 Using `Rack::Test` without the Mixin
4e899bf @rtomayko Link to Testing doc again and tidy up notes about deprecation
rtomayko authored
67 ------------------------------------
4d1d10e @tannerburson Add info about using Rack::Test without the mixin, as well as fix a
tannerburson authored
68 For a variety of reasons you may not want to include `Rack::Test::Methods`
175492c @sr testing: update for latest rack/test
sr authored
69 into your own classes. `Rack::Test` supports this style of testing as well,
70 here is the above example without using Mixin.
4d1d10e @tannerburson Add info about using Rack::Test without the mixin, as well as fix a
tannerburson authored
71
783c236 @frodsan Encourage `RACK_ENV=test` environment variable setup instead of `set :en...
frodsan authored
72 ENV['RACK_ENV'] = 'test'
4d1d10e @tannerburson Add info about using Rack::Test without the mixin, as well as fix a
tannerburson authored
73
74 require 'hello_world'
75 require 'test/unit'
76 require 'rack/test'
77
78 class HelloWorldTest < Test::Unit::TestCase
79
80 def test_it_says_hello_world
175492c @sr testing: update for latest rack/test
sr authored
81 browser = Rack::Test::Session.new(Rack::MockSession.new(Sinatra::Application))
4d1d10e @tannerburson Add info about using Rack::Test without the mixin, as well as fix a
tannerburson authored
82 browser.get '/'
83 assert browser.last_response.ok?
84 assert_equal 'Hello World', browser.last_response.body
85 end
86
87 def test_it_says_hello_to_a_person
175492c @sr testing: update for latest rack/test
sr authored
88 browser = Rack::Test::Session.new(Rack::MockSession.new(Sinatra::Application))
4d1d10e @tannerburson Add info about using Rack::Test without the mixin, as well as fix a
tannerburson authored
89 browser.get '/', :name => 'Simon'
90 assert browser.last_response.body.include?('Simon')
91 end
92 end
93
94
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
95 ### Rack::Test's Mock Request Methods
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
96
97 The `get`, `put`, `post`, `delete`, and `head` methods simulate the
98 respective type of request on the application. Tests typically begin with
99 a call to one of these methods followed by one or more assertions against
100 the resulting response.
101
102 All mock request methods have the same argument signature:
103
104 get '/path', params={}, rack_env={}
105
106 * `/path` is the request path and may optionally include a query string.
107
108 * `params` is a Hash of query/post parameters, a String request body, or
109 `nil`.
110
111 * `rack_env` is a Hash of Rack environment values. This can be used to
112 set request headers and other request related information, such as session
113 data. See the [Rack SPEC][spec] for more information on possible key/values.
114
115 ### Asserting Expectations About The Response
116
117 Once a request method has been invoked, the following attributes are
118 available for making assertions:
119
120 * `app` - The Sinatra application class that handled the mock request.
121
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
122 * `last_request` - The [`Rack::MockRequest`][Rack::MockRequest] used to generate
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
123 the request.
124
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
125 * `last_response` - A [`Rack::MockResponse`][Rack::MockResponse] instance with
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
126 information on the response generated by the application.
127
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
128 Assertions are typically made against the `last_response` object.
129 Consider the following examples:
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
130
131 def test_it_says_hello_world
132 get '/'
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
133 assert last_response.ok?
3d0eb28 @ai Fix last_response.header to last_response.headers
ai authored
134 assert_equal 'Hello World'.length.to_s, last_response.headers['Content-Length']
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
135 assert_equal 'Hello World', last_response.body
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
136 end
137
138 ### Optional Test Setup
139
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
140 The `Rack::Test` mock request methods send requests to the return value of
141 a method named `app`.
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
142
143 If you're testing a modular application that has multiple `Sinatra::Base`
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
144 subclasses, simply set the `app` method to return your particular class.
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
145
cd21b59 @sr whitespaces
sr authored
146 def app
4d1d10e @tannerburson Add info about using Rack::Test without the mixin, as well as fix a
tannerburson authored
147 MySinatraApp
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
148 end
149
cd21b59 @sr whitespaces
sr authored
150 If you're using a classic style Sinatra application, then you need to return an
86f6eb3 @tannerburson Mention that you have to return Sinatra::Application from def app
tannerburson authored
151 instance of `Sinatra::Application`.
152
153 def app
154 Sinatra::Application
155 end
156
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
157 ### Making `Rack::Test` available to all test cases
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
158
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
159 If you'd like the `Rack::Test` methods to be available to all test cases
160 without having to include it each time, you can include the `Rack::Test`
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
161 module in the `Test::Unit::TestCase` class:
162
163 require 'test/unit'
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
164 require 'rack/test'
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
165
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
166 class Test::Unit::TestCase
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
167 include Rack::Test::Methods
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
168 end
169
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
170 Now all `TestCase` subclasses will automatically have `Rack::Test`
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
171 available to them.
172
173 Test Framework Examples {#frameworks}
174 -----------------------
175
176 As of version `0.9.1`, Sinatra no longer provides testing framework-specific
1a1441d @rkh Adjust testing.markdown. Sinatra 1.0 has been released some time ago.
rkh authored
177 helpers. Those found in `sinatra/test/*.rb` are deprecated and has been
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
178 removed in Sinatra `1.0`.
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
179
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
180 ### [RSpec][]
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
181
6c6b287 @baldowl Tweaks to doc about using Rack::Test with RSpec.
baldowl authored
182 Sinatra can be tested under plain RSpec. The `Rack::Test` module should be
183 included within the `describe` block:
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
184
783c236 @frodsan Encourage `RACK_ENV=test` environment variable setup instead of `set :en...
frodsan authored
185 ENV['RACK_ENV'] = 'test'
186
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
187 require 'hello_world' # <-- your sinatra app
ac12b43 @ricardovaleriano testing with rspec: we have to require "rspec" (no more "spec")
ricardovaleriano authored
188 require 'rspec'
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
189 require 'rack/test'
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
190
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
191 describe 'The HelloWorld App' do
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
192 include Rack::Test::Methods
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
193
6c6b287 @baldowl Tweaks to doc about using Rack::Test with RSpec.
baldowl authored
194 def app
195 Sinatra::Application
196 end
197
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
198 it "says hello" do
199 get '/'
7d60bb8 @aweiksnar update RSpec example to use expect() syntax
aweiksnar authored
200 expect(last_response).to be_ok
201 expect(last_response.body).to eq('Hello World')
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
202 end
203 end
204
6c6b287 @baldowl Tweaks to doc about using Rack::Test with RSpec.
baldowl authored
205 Make `Rack::Test` available to all spec contexts by including it via
0e83482 @jc00ke Update for RSpec 2
jc00ke authored
206 `RSpec`:
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
207
ac12b43 @ricardovaleriano testing with rspec: we have to require "rspec" (no more "spec")
ricardovaleriano authored
208 require 'rspec'
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
209 require 'rack/test'
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
210
0e83482 @jc00ke Update for RSpec 2
jc00ke authored
211 RSpec.configure do |conf|
6c6b287 @baldowl Tweaks to doc about using Rack::Test with RSpec.
baldowl authored
212 conf.include Rack::Test::Methods
213 end
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
214
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
215 ### [Bacon][]
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
216
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
217 Testing with Bacon is similar to `test/unit` and RSpec:
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
218
783c236 @frodsan Encourage `RACK_ENV=test` environment variable setup instead of `set :en...
frodsan authored
219 ENV['RACK_ENV'] = 'test'
220
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
221 require 'hello_world' # <-- your sinatra app
222 require 'bacon'
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
223 require 'rack/test'
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
224
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
225 describe 'The HelloWorld App' do
57bbdfe @jmkelly fix up synatx error as explained at https://github.com/chneukirchen/baco...
jmkelly authored
226 extend Rack::Test::Methods
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
227
ff35bfd @sr testing: fix beacon and test/spec examples
sr authored
228 def app
229 Sinatra::Application
230 end
231
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
232 it "says hello" do
233 get '/'
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
234 last_response.should.be.ok
235 last_response.body.should.equal 'Hello World'
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
236 end
237 end
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
238
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
239 Make `Rack::Test` available to all spec contexts by including it in
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
240 `Bacon::Context`:
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
241
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
242 class Bacon::Context
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
243 include Rack::Test::Methods
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
244 end
245
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
246 ### [Test::Spec][]
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
247
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
248 The `Rack::Test` module should be included within the context of the
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
249 `describe` block:
250
783c236 @frodsan Encourage `RACK_ENV=test` environment variable setup instead of `set :en...
frodsan authored
251 ENV['RACK_ENV'] = 'test'
252
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
253 require 'hello_world' # <-- your sinatra app
254 require 'test/spec'
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
255 require 'rack/test'
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
256
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
257 describe 'The HelloWorld App' do
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
258 include Rack::Test::Methods
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
259
ff35bfd @sr testing: fix beacon and test/spec examples
sr authored
260 def app
261 Sinatra::Application
262 end
263
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
264 it "says hello" do
265 get '/'
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
266 last_response.should.be.ok
267 last_response.body.should.equal 'Hello World'
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
268 end
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
269 end
270
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
271 Make `Rack::Test` available to all spec contexts by including it in
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
272 `Test::Unit::TestCase`:
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
273
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
274 require 'test/spec'
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
275 require 'rack/test'
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
276
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
277 Test::Unit::TestCase.send :include, Rack::Test::Methods
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
278
1ff1c30 @hardbap Add Webrat example to Test Framework Examples section.
hardbap authored
279 ### [Webrat][]
280
281 From `Webrat`'s wiki where you'll find more [examples][].
282
783c236 @frodsan Encourage `RACK_ENV=test` environment variable setup instead of `set :en...
frodsan authored
283 ENV['RACK_ENV'] = 'test'
284
1ff1c30 @hardbap Add Webrat example to Test Framework Examples section.
hardbap authored
285 require 'hello_world' # <-- your sinatra app
286 require 'rack/test'
287 require 'test/unit'
288
289 Webrat.configure do |config|
290 config.mode = :rack
291 end
292
293 class HelloWorldTest < Test::Unit::TestCase
294 include Rack::Test::Methods
295 include Webrat::Methods
296 include Webrat::Matchers
297
298 def app
299 Sinatra::Application.new
300 end
301
302 def test_it_works
303 visit '/'
304 assert_contain('Hello World')
305 end
306 end
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
307
82006c7 @hardbap Add Capybara example to Test Framework Examples
hardbap authored
308 ### [Capybara][]
309
310 `Capybara` will use `Rack::Test` by default. You can use another driver, like
311 `Selenium`, by setting the default_driver.
312
783c236 @frodsan Encourage `RACK_ENV=test` environment variable setup instead of `set :en...
frodsan authored
313 ENV['RACK_ENV'] = 'test'
314
82006c7 @hardbap Add Capybara example to Test Framework Examples
hardbap authored
315 require 'hello_world' # <-- your sinatra app
316 require 'capybara'
317 require 'capybara/dsl'
318 require 'test/unit'
319
320 class HelloWorldTest < Test::Unit::TestCase
bdd3ea0 @ricardovaleriano test: include Capybara is deprecated, now we should use Capybara::DSL
ricardovaleriano authored
321 include Capybara::DSL
82006c7 @hardbap Add Capybara example to Test Framework Examples
hardbap authored
322 # Capybara.default_driver = :selenium # <-- use Selenium driver
323
324 def setup
325 Capybara.app = Sinatra::Application.new
326 end
327
328 def test_it_works
329 visit '/'
330 assert page.has_content?('Hello World')
331 end
332 end
333
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
334 See Also
335 --------
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
336
7a7fd4c @tannerburson Cleaning up the testing docs to work with Rack::Test
tannerburson authored
337 See the source for [Rack::Test][] for
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
338 more information on `get`, `post`, `put`, `delete` and friends.
78cbc0e @dashdotat Bootstrapping of changes to doc for testing
dashdotat authored
339
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
340 [Test::Unit]: http://www.ruby-doc.org/stdlib/libdoc/test/unit/rdoc/classes/Test/Unit.html
341 [RSpec]: http://rspec.info
a1bc6ab @randomecho Cull footnote links either not used or no longer there
randomecho authored
342 [Bacon]: https://github.com/chneukirchen/bacon
4043048 @sr Explain how to install and use Sinatra::Test
sr authored
343 [Test::Spec]: http://rubyforge.org/projects/test-spec/
a1bc6ab @randomecho Cull footnote links either not used or no longer there
randomecho authored
344 [Rack::Test]: https://github.com/brynary/rack-test/
9a79545 @frankshearar Correct the Rack SPEC URL.
frankshearar authored
345 [spec]: http://rack.rubyforge.org/doc/SPEC.html
11372f2 @rtomayko Finish up test doc for now [#123]
rtomayko authored
346 [Rack::MockRequest]: http://rack.rubyforge.org/doc/classes/Rack/MockRequest.html
347 [Rack::MockResponse]: http://rack.rubyforge.org/doc/classes/Rack/MockResponse.html
a1bc6ab @randomecho Cull footnote links either not used or no longer there
randomecho authored
348 [Webrat]: https://github.com/brynary/webrat
349 [examples]: https://github.com/brynary/webrat/wiki/sinatra
350 [Capybara]: https://github.com/jnicklas/capybara
Something went wrong with that request. Please try again.