milhouse-spork 0.7.5
Sign up to get free protection for your applications and to get access to all the features.
- data/MIT-LICENSE +20 -0
- data/README.rdoc +100 -0
- data/assets/bootstrap.rb +29 -0
- data/bin/spork +20 -0
- data/features/cucumber_rails_integration.feature +118 -0
- data/features/diagnostic_mode.feature +41 -0
- data/features/rails_delayed_loading_workarounds.feature +115 -0
- data/features/rspec_rails_integration.feature +93 -0
- data/features/spork_debugger.feature +108 -0
- data/features/steps/general_steps.rb +3 -0
- data/features/steps/rails_steps.rb +53 -0
- data/features/steps/sandbox_steps.rb +115 -0
- data/features/support/background_job.rb +63 -0
- data/features/support/env.rb +111 -0
- data/features/unknown_app_framework.feature +42 -0
- data/geminstaller.yml +9 -0
- data/lib/spork/app_framework/rails.rb +158 -0
- data/lib/spork/app_framework/rails_stub_files/application.rb +1 -0
- data/lib/spork/app_framework/rails_stub_files/application_controller.rb +22 -0
- data/lib/spork/app_framework/rails_stub_files/application_helper.rb +3 -0
- data/lib/spork/app_framework/unknown.rb +6 -0
- data/lib/spork/app_framework.rb +74 -0
- data/lib/spork/custom_io_streams.rb +25 -0
- data/lib/spork/diagnoser.rb +103 -0
- data/lib/spork/ext/ruby-debug.rb +150 -0
- data/lib/spork/forker.rb +70 -0
- data/lib/spork/run_strategy/forking.rb +30 -0
- data/lib/spork/run_strategy/magazine/magazine_slave.rb +30 -0
- data/lib/spork/run_strategy/magazine/magazine_slave_provider.rb +27 -0
- data/lib/spork/run_strategy/magazine/ring_server.rb +10 -0
- data/lib/spork/run_strategy/magazine.rb +110 -0
- data/lib/spork/run_strategy.rb +44 -0
- data/lib/spork/runner.rb +90 -0
- data/lib/spork/server.rb +74 -0
- data/lib/spork/test_framework/cucumber.rb +24 -0
- data/lib/spork/test_framework/rspec.rb +14 -0
- data/lib/spork/test_framework.rb +167 -0
- data/lib/spork.rb +126 -0
- data/spec/spec_helper.rb +108 -0
- data/spec/spork/app_framework/rails_spec.rb +22 -0
- data/spec/spork/app_framework/unknown_spec.rb +12 -0
- data/spec/spork/app_framework_spec.rb +16 -0
- data/spec/spork/diagnoser_spec.rb +105 -0
- data/spec/spork/forker_spec.rb +44 -0
- data/spec/spork/run_strategy/forking_spec.rb +38 -0
- data/spec/spork/runner_spec.rb +50 -0
- data/spec/spork/server_spec.rb +15 -0
- data/spec/spork/test_framework/cucumber_spec.rb +11 -0
- data/spec/spork/test_framework/rspec_spec.rb +10 -0
- data/spec/spork/test_framework_spec.rb +114 -0
- data/spec/spork_spec.rb +151 -0
- data/spec/support/fake_framework.rb +15 -0
- data/spec/support/fake_run_strategy.rb +21 -0
- metadata +134 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Tim Harper
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,100 @@
|
|
1
|
+
= Spork
|
2
|
+
|
3
|
+
* Repository: http://github.com/timcharper/spork
|
4
|
+
* Issues: http://github.com/timcharper/spork/issues
|
5
|
+
* Changes: http://github.com/timcharper/spork/blob/master/History.txt
|
6
|
+
* Mailing list: http://groups.google.com/group/sporkgem
|
7
|
+
* Wiki: http://wiki.github.com/timcharper/spork
|
8
|
+
|
9
|
+
== SYNOPSIS:
|
10
|
+
|
11
|
+
Spork is Tim Harper's implementation of test server (similar to the script/spec_server provided by rspec-rails), except rather than using the Rails constant unloading to reload your files, it forks a copy of the server each time you run your tests. The result? Spork runs more solid: it doesn't get corrupted over time, and it properly handles modules and any voo-doo meta programming you may have put in your app.
|
12
|
+
|
13
|
+
Because Spork uses Kernel.fork, it only works on POSIX systems. This means Windows users are not invited to this party. Sorry :(
|
14
|
+
|
15
|
+
== Supported Testing Frameworks
|
16
|
+
|
17
|
+
* Rspec
|
18
|
+
* Cucumber
|
19
|
+
|
20
|
+
And more to come! Vote for your favorite at http://github.com/timcharper/spork/issues
|
21
|
+
|
22
|
+
== Supported Application Frameworks
|
23
|
+
|
24
|
+
Actually, Spork ~can~ work with any application framework. But, it ships with hooks and helpers to help make the experience much more "out of the box"
|
25
|
+
|
26
|
+
* Rails
|
27
|
+
|
28
|
+
More can be added! Vote for your favorite at http://github.com/timcharper/spork/issues
|
29
|
+
|
30
|
+
== INSTALL:
|
31
|
+
|
32
|
+
[sudo] gem install spork
|
33
|
+
|
34
|
+
alternatively:
|
35
|
+
|
36
|
+
git clone git://github.com/timcharper/spork.git
|
37
|
+
cd spork
|
38
|
+
gem build spork.gemspec
|
39
|
+
sudo gem install spork.gemspec
|
40
|
+
|
41
|
+
== Usage
|
42
|
+
|
43
|
+
From a terminal, change to your project directory.
|
44
|
+
|
45
|
+
Then, bootstrap your spec/spec_helper.rb file.
|
46
|
+
|
47
|
+
spork --bootstrap
|
48
|
+
|
49
|
+
Next, edit spec/spec_helper.rb and follow the instructions that were put at the top.
|
50
|
+
|
51
|
+
Finally, run spork. A spec DRb server will be running!
|
52
|
+
|
53
|
+
spork
|
54
|
+
|
55
|
+
== Diagnostic mode
|
56
|
+
|
57
|
+
Initially, you may find that a few files don't reload automatically. This is because they are being loaded during Spork startup. To identify which project files are being pre-loaded, and why, run:
|
58
|
+
|
59
|
+
spork --diagnose
|
60
|
+
(or spork -d, for short)
|
61
|
+
|
62
|
+
It will output a lot of stuff. At the top you'll find a summary of all project files loaded. Down below, the stack trace for each file (how it got loaded). Spork hooks into Rails and does some magic (TM) to prevent ApplicationController observers, etc from pre-loading. Similar hooks for other ruby frameworks may come as support demands.
|
63
|
+
|
64
|
+
== Running specs over Spork
|
65
|
+
|
66
|
+
=== RSpec
|
67
|
+
|
68
|
+
To get the TextMate RSpec bundle to use spork, go to config->advanced->shell variables, and add:
|
69
|
+
|
70
|
+
TM_RSPEC_OPTS=--drb.
|
71
|
+
|
72
|
+
To run from the command line, use:
|
73
|
+
|
74
|
+
spec --drb spec/lib/my_spec.rb
|
75
|
+
|
76
|
+
Or, you could add the following flag to your +spec.opts+ file.
|
77
|
+
|
78
|
+
--drb
|
79
|
+
|
80
|
+
=== Cucumber
|
81
|
+
|
82
|
+
Cucumber has DRb support (see http://wiki.github.com/aslakhellesoy/cucumber/spork-and-drb )
|
83
|
+
|
84
|
+
cucumber --drb
|
85
|
+
|
86
|
+
Use this as a guideline when "Sporking" your features/support/env.rb file
|
87
|
+
|
88
|
+
http://gist.github.com/123370
|
89
|
+
|
90
|
+
== Some potential issues and ways to overcome them:
|
91
|
+
|
92
|
+
See http://wiki.github.com/timcharper/spork/troubleshooting
|
93
|
+
|
94
|
+
== Kudos to
|
95
|
+
|
96
|
+
* Ben Mabey - help with documentation, testing, suggestions, patches, and bringing Cucumber support.
|
97
|
+
* David Chelimsky - for the fine RSpec testing framework, and the original rspec-rails spec_server implementation, which Spork has built upon.
|
98
|
+
* Lead Media Partners - just for being an awesome place to work.
|
99
|
+
|
100
|
+
Spork (c) 2009 Tim Harper, released under the MIT license
|
data/assets/bootstrap.rb
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'spork'
|
3
|
+
|
4
|
+
Spork.prefork do
|
5
|
+
# Loading more in this block will cause your tests to run faster. However,
|
6
|
+
# if you change any configuration or code from libraries loaded here, you'll
|
7
|
+
# need to restart spork for it take effect.
|
8
|
+
|
9
|
+
end
|
10
|
+
|
11
|
+
Spork.each_run do
|
12
|
+
# This code will be run each time you run your specs.
|
13
|
+
|
14
|
+
end
|
15
|
+
|
16
|
+
# --- Instructions ---
|
17
|
+
# - Sort through your spec_helper file. Place as much environment loading
|
18
|
+
# code that you don't normally modify during development in the
|
19
|
+
# Spork.prefork block.
|
20
|
+
# - Place the rest under Spork.each_run block
|
21
|
+
# - Any code that is left outside of the blocks will be ran during preforking
|
22
|
+
# and during each_run!
|
23
|
+
# - These instructions should self-destruct in 10 seconds. If they don't,
|
24
|
+
# feel free to delete them.
|
25
|
+
#
|
26
|
+
|
27
|
+
|
28
|
+
|
29
|
+
|
data/bin/spork
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'rubygems'
|
3
|
+
|
4
|
+
$LOAD_PATH.unshift(File.dirname(__FILE__) + '/../lib') unless $LOAD_PATH.include?(File.dirname(__FILE__) + '/../lib')
|
5
|
+
|
6
|
+
require 'spork'
|
7
|
+
require 'spork/runner'
|
8
|
+
|
9
|
+
begin
|
10
|
+
success = Spork::Runner.run(ARGV, STDOUT, STDERR)
|
11
|
+
Kernel.exit(success ? 0 : 1)
|
12
|
+
rescue SystemExit => e
|
13
|
+
Kernel.exit(e.status)
|
14
|
+
rescue Exception => e
|
15
|
+
STDERR.puts("#{e.message} (#{e.class})")
|
16
|
+
STDERR.puts(e.backtrace.join("\n"))
|
17
|
+
Kernel.exit 1
|
18
|
+
end
|
19
|
+
|
20
|
+
|
@@ -0,0 +1,118 @@
|
|
1
|
+
Feature: Cucumber integration with rails
|
2
|
+
As a developer using cucumber and rails
|
3
|
+
I want to use Spork with Cucumber
|
4
|
+
In order to eliminate the startup cost of my application each time I run them
|
5
|
+
|
6
|
+
Background: Sporked env.rb
|
7
|
+
Given I am in a fresh rails project named "test_rails_project"
|
8
|
+
And the application has a model, observer, route, and application helper
|
9
|
+
And a file named "features/support/env.rb" with:
|
10
|
+
"""
|
11
|
+
require 'rubygems'
|
12
|
+
require 'spork'
|
13
|
+
|
14
|
+
Spork.prefork do
|
15
|
+
# Loading more in this block will cause your tests to run faster. However,
|
16
|
+
# if you change any configuration or code from libraries loaded here, you'll
|
17
|
+
# need to restart spork for it take effect.
|
18
|
+
|
19
|
+
# Sets up the Rails environment for Cucumber
|
20
|
+
ENV['RAILS_ENV'] = "features"
|
21
|
+
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')
|
22
|
+
|
23
|
+
require 'cucumber'
|
24
|
+
require 'cucumber/formatter/unicode' # Comment out this line if you don't want Cucumber Unicode support
|
25
|
+
require 'spec/rails'
|
26
|
+
require 'cucumber/rails/rspec'
|
27
|
+
|
28
|
+
#### this is for this test only #######
|
29
|
+
$loaded_stuff << 'prefork block' ######
|
30
|
+
#######################################
|
31
|
+
end
|
32
|
+
|
33
|
+
Spork.each_run do
|
34
|
+
#### this is for this test only #######
|
35
|
+
$loaded_stuff << 'each_run block' #####
|
36
|
+
#######################################
|
37
|
+
end
|
38
|
+
"""
|
39
|
+
And a file named "features/cucumber_rails.feature" with:
|
40
|
+
"""
|
41
|
+
Feature: cucumber rails
|
42
|
+
Scenario: did it work?
|
43
|
+
Then it should work
|
44
|
+
|
45
|
+
Scenario: did it work again?
|
46
|
+
Then it should work
|
47
|
+
"""
|
48
|
+
And a file named "features/cucumber_rails_fr.feature" with:
|
49
|
+
"""
|
50
|
+
# language: fr
|
51
|
+
Fonction: French
|
52
|
+
Scénario: ca marche?
|
53
|
+
Alors ca marche
|
54
|
+
"""
|
55
|
+
And a file named "features/support/cucumber_rails_helper.rb" with:
|
56
|
+
"""
|
57
|
+
$loaded_stuff << 'features/support/cucumber_rails_helper.rb'
|
58
|
+
"""
|
59
|
+
And a file named "config/environments/features.rb" with:
|
60
|
+
"""
|
61
|
+
# your cucumber env here
|
62
|
+
"""
|
63
|
+
And a file named "config/database.yml" with:
|
64
|
+
"""
|
65
|
+
features:
|
66
|
+
adapter: sqlite3
|
67
|
+
database: db/features.sqlite3
|
68
|
+
timeout: 5000
|
69
|
+
"""
|
70
|
+
And a file named "features/step_definitions/cucumber_rails_steps.rb" with:
|
71
|
+
"""
|
72
|
+
Then "it should work" do
|
73
|
+
(Rails.respond_to?(:logger) ? Rails.logger : ActionController::Base.logger).info "hey there"
|
74
|
+
$loaded_stuff.should include('ActiveRecord::Base.establish_connection')
|
75
|
+
$loaded_stuff.should include('User')
|
76
|
+
$loaded_stuff.should include('UserObserver')
|
77
|
+
$loaded_stuff.should include('ApplicationHelper')
|
78
|
+
$loaded_stuff.should include('config/routes.rb')
|
79
|
+
$loaded_stuff.should include('features/support/cucumber_rails_helper.rb')
|
80
|
+
$loaded_stuff.should include('each_run block')
|
81
|
+
$loaded_stuff.should include('prefork block')
|
82
|
+
puts "It worked!"
|
83
|
+
end
|
84
|
+
|
85
|
+
Alors /ca marche/ do
|
86
|
+
end
|
87
|
+
"""
|
88
|
+
Scenario: Analyzing files were preloaded
|
89
|
+
When I run spork --diagnose
|
90
|
+
Then the output should not contain "user_observer.rb"
|
91
|
+
Then the output should not contain "user.rb"
|
92
|
+
Then the output should not contain "app/controllers/application.rb"
|
93
|
+
Then the output should not contain "app/controllers/application_controller.rb"
|
94
|
+
Then the output should not contain "app/controllers/application_helper.rb"
|
95
|
+
Then the output should not contain "config/routes.rb"
|
96
|
+
Then the output should not contain "features/step_definitions/cucumber_rails_steps.rb"
|
97
|
+
Then the output should not contain "features/support/cucumber_rails_helper.rb"
|
98
|
+
|
99
|
+
Scenario: Running spork with a rails app and no server
|
100
|
+
When I run cucumber --drb features
|
101
|
+
Then the error output should contain
|
102
|
+
"""
|
103
|
+
WARNING: No DRb server is running. Running features locally
|
104
|
+
"""
|
105
|
+
|
106
|
+
Scenario: Running spork with a rails app and observers
|
107
|
+
When I fire up a spork instance with "spork cucumber"
|
108
|
+
And I run cucumber --drb features
|
109
|
+
Then the error output should be empty
|
110
|
+
And the output should contain "It worked!"
|
111
|
+
And the file "log/features.log" should include "hey there"
|
112
|
+
|
113
|
+
Scenario: Running spork with a rails app and a non-standard port
|
114
|
+
When I fire up a spork instance with "spork cucumber -p 9000"
|
115
|
+
And I run cucumber --drb --port 9000 features
|
116
|
+
Then the error output should be empty
|
117
|
+
And the output should contain "It worked!"
|
118
|
+
And the file "log/features.log" should include "hey there"
|
@@ -0,0 +1,41 @@
|
|
1
|
+
Feature: Diagnostic Mode
|
2
|
+
To help a developer quickly pinpoint why files are being loaded
|
3
|
+
Spork provides a diagnostic mode
|
4
|
+
That provides a list of which project files were loaded during prefork, and who loaded them.
|
5
|
+
|
6
|
+
Scenario: Running spork --diagnose
|
7
|
+
Given I am in the directory "test_project"
|
8
|
+
And a file named "spec/spec_helper.rb" with:
|
9
|
+
"""
|
10
|
+
require 'rubygems'
|
11
|
+
require 'spork'
|
12
|
+
|
13
|
+
Spork.prefork do
|
14
|
+
require 'lib/awesome.rb'
|
15
|
+
require '../external_dependency/super_duper.rb'
|
16
|
+
end
|
17
|
+
|
18
|
+
Spork.each_run do
|
19
|
+
puts "I'm loading the stuff just for this run..."
|
20
|
+
end
|
21
|
+
"""
|
22
|
+
And a file named "lib/awesome.rb" with:
|
23
|
+
"""
|
24
|
+
class Awesome
|
25
|
+
end
|
26
|
+
"""
|
27
|
+
And a file named "../external_dependency/super_duper.rb" with:
|
28
|
+
"""
|
29
|
+
class Awesome
|
30
|
+
end
|
31
|
+
"""
|
32
|
+
When I run spork --diagnose
|
33
|
+
Then the error output should contain
|
34
|
+
"""
|
35
|
+
Loading Spork.prefork block...
|
36
|
+
"""
|
37
|
+
And the output should contain "lib/awesome.rb"
|
38
|
+
And the output should contain "spec/spec_helper.rb:5"
|
39
|
+
And the output should not contain "super_duper.rb"
|
40
|
+
And the output should not contain "diagnose.rb"
|
41
|
+
|
@@ -0,0 +1,115 @@
|
|
1
|
+
Feature: Rails Delayed Work arounds
|
2
|
+
To allow a rails developer to update as many parts of his application as possible without needing to restart Spork
|
3
|
+
Spork automatically tells rails to delay loading certain parts of the application until after the fork occurs
|
4
|
+
Providing work arounds
|
5
|
+
|
6
|
+
Background: Rails App with RSpec and Spork
|
7
|
+
|
8
|
+
Given I am in a fresh rails project named "test_rails_project"
|
9
|
+
And a file named "spec/spec_helper.rb" with:
|
10
|
+
"""
|
11
|
+
require 'rubygems'
|
12
|
+
require 'spork'
|
13
|
+
|
14
|
+
Spork.prefork do
|
15
|
+
require File.dirname(__FILE__) + '/../config/environment.rb'
|
16
|
+
require 'spec'
|
17
|
+
require 'spec/rails'
|
18
|
+
end
|
19
|
+
|
20
|
+
Spork.each_run do
|
21
|
+
end
|
22
|
+
"""
|
23
|
+
And the application has a model, observer, route, and application helper
|
24
|
+
Given a file named "app/helpers/application_helper.rb" with:
|
25
|
+
"""
|
26
|
+
module ApplicationHelper
|
27
|
+
include Reverseatron
|
28
|
+
end
|
29
|
+
"""
|
30
|
+
Given a file named "lib/reverseatron.rb" with:
|
31
|
+
"""
|
32
|
+
module Reverseatron
|
33
|
+
def reverse_text(txt)
|
34
|
+
txt.reverse
|
35
|
+
end
|
36
|
+
end
|
37
|
+
"""
|
38
|
+
Given a file named "app/controllers/users_controller.rb" with:
|
39
|
+
"""
|
40
|
+
class UsersController < ApplicationController
|
41
|
+
$loaded_stuff << 'UsersController'
|
42
|
+
def index
|
43
|
+
@users = []
|
44
|
+
end
|
45
|
+
end
|
46
|
+
"""
|
47
|
+
Given a file named "app/helpers/misc_helper.rb" with:
|
48
|
+
"""
|
49
|
+
module MiscHelper
|
50
|
+
def misc_helper_method
|
51
|
+
'hello miscellaneous'
|
52
|
+
end
|
53
|
+
end
|
54
|
+
"""
|
55
|
+
Given a file named "app/helpers/users_helper.rb" with:
|
56
|
+
"""
|
57
|
+
module UsersHelper
|
58
|
+
end
|
59
|
+
"""
|
60
|
+
Given a file named "app/views/users/index.html.erb" with:
|
61
|
+
"""
|
62
|
+
Original View
|
63
|
+
"""
|
64
|
+
Scenario: within a view rendered by a controller, calling helper methods from an included module in ApplicationHelper
|
65
|
+
Given a file named "spec/controllers/users_controller_spec.rb" with:
|
66
|
+
"""
|
67
|
+
describe UsersController do
|
68
|
+
integrate_views
|
69
|
+
it "renders a page, using a method inherited from ApplicationController" do
|
70
|
+
get :index
|
71
|
+
response.body.should_not include('Original View')
|
72
|
+
puts "Views are not being cached when rendering from a controller"
|
73
|
+
|
74
|
+
response.body.should include('listing users')
|
75
|
+
puts "Controller stack is functioning when rendering from a controller"
|
76
|
+
|
77
|
+
response.body.should include('hello miscellaneous')
|
78
|
+
puts "All helper modules were included when rendering from a controller"
|
79
|
+
end
|
80
|
+
end
|
81
|
+
"""
|
82
|
+
Given a file named "spec/views/index.html.erb_spec.rb" with:
|
83
|
+
"""
|
84
|
+
describe "/users/index.html.erb" do
|
85
|
+
|
86
|
+
it "renders the view" do
|
87
|
+
render
|
88
|
+
response.body.should_not include('Original View')
|
89
|
+
puts "Views are not being cached when rendering directly"
|
90
|
+
|
91
|
+
response.body.should include('listing users')
|
92
|
+
puts "Controller stack is functioning when rendering directly"
|
93
|
+
|
94
|
+
response.body.should include('hello miscellaneous')
|
95
|
+
puts "All helper modules were included when rendering directly"
|
96
|
+
end
|
97
|
+
end
|
98
|
+
"""
|
99
|
+
When I fire up a spork instance with "spork rspec"
|
100
|
+
And the contents of "app/views/users/index.html.erb" are changed to:
|
101
|
+
"""
|
102
|
+
<%= reverse_text('listing users'.reverse) %>
|
103
|
+
<%= misc_helper_method rescue nil %>
|
104
|
+
<p>Here is a list of users</p>
|
105
|
+
"""
|
106
|
+
|
107
|
+
And I run spec --drb spec/controllers/users_controller_spec.rb
|
108
|
+
Then the output should contain "Controller stack is functioning when rendering from a controller"
|
109
|
+
Then the output should contain "Views are not being cached when rendering from a controller"
|
110
|
+
Then the output should contain "All helper modules were included when rendering from a controller"
|
111
|
+
|
112
|
+
And I run spec --drb spec/views/index.html.erb_spec.rb
|
113
|
+
Then the output should contain "Controller stack is functioning when rendering directly"
|
114
|
+
Then the output should contain "Views are not being cached when rendering directly"
|
115
|
+
Then the output should contain "All helper modules were included when rendering directly"
|
@@ -0,0 +1,93 @@
|
|
1
|
+
Feature: Rails Integration
|
2
|
+
To get a developer up and running quickly
|
3
|
+
Spork automatically integrates with rails
|
4
|
+
Providing default hooks and behaviors
|
5
|
+
|
6
|
+
Background: Rails App with RSpec and Spork
|
7
|
+
|
8
|
+
Given I am in a fresh rails project named "test_rails_project"
|
9
|
+
And a file named "spec/spec_helper.rb" with:
|
10
|
+
"""
|
11
|
+
require 'rubygems'
|
12
|
+
require 'spork'
|
13
|
+
|
14
|
+
Spork.prefork do
|
15
|
+
# Loading more in this block will cause your specs to run faster. However,
|
16
|
+
# if you change any configuration or code from libraries loaded here, you'll
|
17
|
+
# need to restart spork for it take effect.
|
18
|
+
require File.dirname(__FILE__) + '/../config/environment.rb'
|
19
|
+
require 'spec'
|
20
|
+
require 'spec/rails'
|
21
|
+
|
22
|
+
#### this is for this test only #######
|
23
|
+
$loaded_stuff << 'prefork block' ######
|
24
|
+
#######################################
|
25
|
+
end
|
26
|
+
|
27
|
+
Spork.each_run do
|
28
|
+
# This code will be run each time you run your specs.
|
29
|
+
|
30
|
+
#### this is for this test only #######
|
31
|
+
$loaded_stuff << 'each_run block' #####
|
32
|
+
#######################################
|
33
|
+
end
|
34
|
+
"""
|
35
|
+
And the application has a model, observer, route, and application helper
|
36
|
+
Scenario: Analyzing files were preloaded
|
37
|
+
When I run spork --diagnose
|
38
|
+
Then the output should not contain "user_observer.rb"
|
39
|
+
Then the output should not contain "user.rb"
|
40
|
+
Then the output should not contain "app/controllers/application.rb"
|
41
|
+
Then the output should not contain "app/controllers/application_controller.rb"
|
42
|
+
Then the output should not contain "app/controllers/application_helper.rb"
|
43
|
+
Then the output should not contain "config/routes.rb"
|
44
|
+
|
45
|
+
Scenario: Running spork with a rails app and observers
|
46
|
+
Given a file named "spec/did_it_work_spec.rb" with:
|
47
|
+
"""
|
48
|
+
describe "Did it work?" do
|
49
|
+
it "checks to see if all worked" do
|
50
|
+
Spork.state.should == :using_spork
|
51
|
+
(Rails.respond_to?(:logger) ? Rails.logger : ActionController::Base.logger).info "hey there"
|
52
|
+
$loaded_stuff.should include('ActiveRecord::Base.establish_connection')
|
53
|
+
$loaded_stuff.should include('User')
|
54
|
+
$loaded_stuff.should include('UserObserver')
|
55
|
+
$loaded_stuff.should include('ApplicationHelper')
|
56
|
+
$loaded_stuff.should include('config/routes.rb')
|
57
|
+
$loaded_stuff.should include('each_run block')
|
58
|
+
$loaded_stuff.should include('prefork block')
|
59
|
+
puts "Specs successfully run within spork, and all initialization files were loaded"
|
60
|
+
end
|
61
|
+
end
|
62
|
+
"""
|
63
|
+
When I fire up a spork instance with "spork rspec"
|
64
|
+
And I run spec --drb spec/did_it_work_spec.rb
|
65
|
+
Then the error output should be empty
|
66
|
+
And the output should contain "Specs successfully run within spork, and all initialization files were loaded"
|
67
|
+
And the file "log/test.log" should include "hey there"
|
68
|
+
|
69
|
+
|
70
|
+
Scenario: Running spork with a rails app and a non-standard port
|
71
|
+
Given this scenario is pending until rspec releases a version that supports --port
|
72
|
+
Given a file named "spec/did_it_work_spec.rb" with:
|
73
|
+
"""
|
74
|
+
describe "Did it work?" do
|
75
|
+
it "checks to see if all worked" do
|
76
|
+
Spork.state.should == :using_spork
|
77
|
+
(Rails.respond_to?(:logger) ? Rails.logger : ActionController::Base.logger).info "hey there"
|
78
|
+
$loaded_stuff.should include('ActiveRecord::Base.establish_connection')
|
79
|
+
$loaded_stuff.should include('User')
|
80
|
+
$loaded_stuff.should include('UserObserver')
|
81
|
+
$loaded_stuff.should include('ApplicationHelper')
|
82
|
+
$loaded_stuff.should include('config/routes.rb')
|
83
|
+
$loaded_stuff.should include('each_run block')
|
84
|
+
$loaded_stuff.should include('prefork block')
|
85
|
+
puts "Specs successfully run within spork, and all initialization files were loaded"
|
86
|
+
end
|
87
|
+
end
|
88
|
+
"""
|
89
|
+
When I fire up a spork instance with "spork rspec --port 7000"
|
90
|
+
And I run spec --drb --port 7000 spec/did_it_work_spec.rb
|
91
|
+
Then the error output should be empty
|
92
|
+
And the output should contain "Specs successfully run within spork, and all initialization files were loaded"
|
93
|
+
And the file "log/test.log" should include "hey there"
|
@@ -0,0 +1,108 @@
|
|
1
|
+
Feature: Spork Debugger integration
|
2
|
+
As a developer
|
3
|
+
I want to invoke the debugger my specs within Spork
|
4
|
+
In order to drill in and figure out what's wrong
|
5
|
+
|
6
|
+
Scenario: Invoking the debugger via 'debugger'
|
7
|
+
Given a file named "spec/spec_helper.rb" with:
|
8
|
+
"""
|
9
|
+
require 'rubygems'
|
10
|
+
require 'spork'
|
11
|
+
require 'spork/ext/ruby-debug'
|
12
|
+
|
13
|
+
Spork.prefork { require 'spec' }
|
14
|
+
Spork.each_run { }
|
15
|
+
"""
|
16
|
+
And a file named "spec/debugger_spec.rb" with:
|
17
|
+
"""
|
18
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
19
|
+
|
20
|
+
describe "Debugger" do
|
21
|
+
it "should debug" do
|
22
|
+
2.times do |count|
|
23
|
+
@message = "count = #{count}"
|
24
|
+
debugger
|
25
|
+
@message = nil
|
26
|
+
end
|
27
|
+
puts "it worked!"
|
28
|
+
end
|
29
|
+
end
|
30
|
+
"""
|
31
|
+
|
32
|
+
When I fire up a spork instance with "spork rspec"
|
33
|
+
And I run this in the background: spec --drb spec/debugger_spec.rb
|
34
|
+
|
35
|
+
Then the spork window should output a line containing "Debug Session Started"
|
36
|
+
|
37
|
+
When I type this in the spork window: "e @message"
|
38
|
+
Then the spork window should output a line containing "count = 0"
|
39
|
+
|
40
|
+
When I type this in the spork window: "continue"
|
41
|
+
|
42
|
+
When I type this in the spork window: "e @message"
|
43
|
+
Then the spork window should output a line containing "count = 1"
|
44
|
+
|
45
|
+
When I type this in the spork window: "continue"
|
46
|
+
|
47
|
+
Then the spork window should output a line containing "Debug Session Terminated"
|
48
|
+
And the output should contain "it worked!"
|
49
|
+
|
50
|
+
Scenario: When ruby-debug is already required and started.
|
51
|
+
Given a file named "spec/spec_helper.rb" with:
|
52
|
+
"""
|
53
|
+
require 'rubygems'
|
54
|
+
require 'spork'
|
55
|
+
require 'ruby-debug'
|
56
|
+
Debugger.start
|
57
|
+
|
58
|
+
require 'spork/ext/ruby-debug'
|
59
|
+
|
60
|
+
Spork.prefork { require 'spec' }
|
61
|
+
Spork.each_run { }
|
62
|
+
"""
|
63
|
+
|
64
|
+
And a file named "spec/debugger_spec.rb" with:
|
65
|
+
"""
|
66
|
+
require File.dirname(__FILE__) + '/spec_helper.rb'
|
67
|
+
|
68
|
+
describe "Debugger" do
|
69
|
+
it "should debug" do
|
70
|
+
@message = "yup"
|
71
|
+
debugger
|
72
|
+
puts "it worked!"
|
73
|
+
end
|
74
|
+
end
|
75
|
+
"""
|
76
|
+
|
77
|
+
When I fire up a spork instance with "spork rspec"
|
78
|
+
And I run this in the background: spec --drb spec/debugger_spec.rb
|
79
|
+
|
80
|
+
Then the spork window should output a line containing "Debug Session Started"
|
81
|
+
|
82
|
+
When I type this in the spork window: "e @message"
|
83
|
+
Then the spork window should output a line containing "yup"
|
84
|
+
|
85
|
+
When I type this in the spork window: "continue"
|
86
|
+
|
87
|
+
Then the spork window should output a line containing "Debug Session Terminated"
|
88
|
+
And the output should contain "it worked!"
|
89
|
+
|
90
|
+
Scenario: When ruby-debug is invoked during preload
|
91
|
+
Given a file named "spec/spec_helper.rb" with:
|
92
|
+
"""
|
93
|
+
require 'rubygems'
|
94
|
+
require 'spork'
|
95
|
+
require 'spork/ext/ruby-debug'
|
96
|
+
|
97
|
+
STDERR.puts("Spork is ready and listening") # trick out the start spork step to believe spork is ready... naughty, but effective.
|
98
|
+
@message = "it worked"
|
99
|
+
debugger
|
100
|
+
Spork.prefork { require 'spec' }
|
101
|
+
Spork.each_run { }
|
102
|
+
"""
|
103
|
+
|
104
|
+
When I fire up a spork instance with "spork rspec"
|
105
|
+
Then the spork window should output a line containing "spec_helper.rb"
|
106
|
+
When I type this in the spork window: "e @message"
|
107
|
+
Then the spork window should output a line containing "it worked"
|
108
|
+
When I type this in the spork window: "continue"
|