spork 0.5.3 → 0.5.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/assets/bootstrap.rb +1 -1
- data/features/cucumber_rails_integration.feature +27 -24
- data/features/rails_delayed_loading_workarounds.feature +71 -0
- data/features/rspec_rails_integration.feature +64 -0
- data/features/steps/rails_steps.rb +24 -9
- data/lib/spork/app_framework/rails.rb +2 -0
- metadata +3 -2
- data/features/rails_integration.feature +0 -78
data/assets/bootstrap.rb
CHANGED
@@ -2,7 +2,7 @@ require 'rubygems'
|
|
2
2
|
require 'spork'
|
3
3
|
|
4
4
|
Spork.prefork do
|
5
|
-
# Loading more in this block will cause your
|
5
|
+
# Loading more in this block will cause your tests to run faster. However,
|
6
6
|
# if you change any configuration or code from libraries loaded here, you'll
|
7
7
|
# need to restart spork for it take effect.
|
8
8
|
|
@@ -12,6 +12,10 @@ Feature: Cucumber integration with rails
|
|
12
12
|
require 'spork'
|
13
13
|
|
14
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
|
+
|
15
19
|
# Sets up the Rails environment for Cucumber
|
16
20
|
ENV['RAILS_ENV'] = "cucumber"
|
17
21
|
require File.expand_path(File.dirname(__FILE__) + '/../../config/environment')
|
@@ -23,18 +27,14 @@ Feature: Cucumber integration with rails
|
|
23
27
|
end
|
24
28
|
|
25
29
|
require 'webrat/core/matchers'
|
26
|
-
require 'cucumber'
|
30
|
+
require 'cucumber'
|
27
31
|
require 'cucumber/formatter/unicode' # Comment out this line if you don't want Cucumber Unicode support
|
28
|
-
require 'spec/rails'
|
32
|
+
require 'spec/rails'
|
29
33
|
require 'cucumber/rails/rspec'
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
($loaded_stuff ||= []) << 'prefork block'
|
34
|
+
|
35
|
+
# ---- this is for this test only ----
|
36
|
+
$loaded_stuff << 'prefork block'
|
37
|
+
# ---- end test stuff ----
|
38
38
|
end
|
39
39
|
|
40
40
|
Spork.each_run do
|
@@ -43,7 +43,10 @@ Feature: Cucumber integration with rails
|
|
43
43
|
Cucumber::Rails.use_transactional_fixtures
|
44
44
|
Cucumber::Rails.bypass_rescue # Comment out this line if you want Rails own error handling
|
45
45
|
# (e.g. rescue_action_in_public / rescue_responses / rescue_from)
|
46
|
-
|
46
|
+
|
47
|
+
# ---- this is for this test only ----
|
48
|
+
$loaded_stuff << 'each_run block'
|
49
|
+
# ---- end test stuff ----
|
47
50
|
end
|
48
51
|
"""
|
49
52
|
And a file named "features/cucumber_rails.feature" with:
|
@@ -54,14 +57,25 @@ Feature: Cucumber integration with rails
|
|
54
57
|
"""
|
55
58
|
And a file named "features/support/cucumber_rails_helper.rb" with:
|
56
59
|
"""
|
57
|
-
|
60
|
+
$loaded_stuff << 'features/support/cucumber_rails_helper.rb'
|
61
|
+
"""
|
62
|
+
And a file named "config/environments/cucumber.rb" with:
|
63
|
+
"""
|
64
|
+
# your cucumber env here
|
65
|
+
"""
|
66
|
+
And a file named "config/database.yml" with:
|
67
|
+
"""
|
68
|
+
cucumber:
|
69
|
+
adapter: sqlite3
|
70
|
+
database: db/cucumber.sqlite3
|
71
|
+
timeout: 5000
|
58
72
|
"""
|
59
73
|
And a file named "features/step_definitions/cucumber_rails_steps.rb" with:
|
60
74
|
"""
|
61
75
|
Then "it should work" do
|
62
76
|
Spork.state.should == :using_spork
|
63
77
|
RAILS_ENV.should == 'cucumber'
|
64
|
-
$loaded_stuff.should include('establish_connection')
|
78
|
+
$loaded_stuff.should include('ActiveRecord::Base.establish_connection')
|
65
79
|
$loaded_stuff.should include('User')
|
66
80
|
$loaded_stuff.should include('UserObserver')
|
67
81
|
$loaded_stuff.should include('ApplicationHelper')
|
@@ -72,17 +86,6 @@ Feature: Cucumber integration with rails
|
|
72
86
|
puts "It worked!"
|
73
87
|
end
|
74
88
|
"""
|
75
|
-
And a file named "config/environments/cucumber.rb" with:
|
76
|
-
"""
|
77
|
-
$cucumber_used = true
|
78
|
-
"""
|
79
|
-
And a file named "config/database.yml" with:
|
80
|
-
"""
|
81
|
-
cucumber:
|
82
|
-
adapter: sqlite3
|
83
|
-
database: db/cucumber.sqlite3
|
84
|
-
timeout: 5000
|
85
|
-
"""
|
86
89
|
Scenario: Analyzing files were preloaded
|
87
90
|
When I run spork --diagnose
|
88
91
|
Then the output should not contain "user_observer.rb"
|
@@ -0,0 +1,71 @@
|
|
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
|
+
Scenario: within a view, calling helper methods from an included module in ApplicationHelper
|
25
|
+
Given a file named "app/helpers/application_helper.rb" with:
|
26
|
+
"""
|
27
|
+
module ApplicationHelper
|
28
|
+
include Reverseatron
|
29
|
+
end
|
30
|
+
"""
|
31
|
+
Given a file named "lib/reverseatron.rb" with:
|
32
|
+
"""
|
33
|
+
module Reverseatron
|
34
|
+
def reverse_text(txt)
|
35
|
+
txt.reverse
|
36
|
+
end
|
37
|
+
end
|
38
|
+
"""
|
39
|
+
Given a file named "app/controllers/users_controller.rb" with:
|
40
|
+
"""
|
41
|
+
class UsersController < ApplicationController
|
42
|
+
$loaded_stuff << 'UsersController'
|
43
|
+
def index
|
44
|
+
@users = []
|
45
|
+
end
|
46
|
+
end
|
47
|
+
"""
|
48
|
+
Given a file named "app/controllers/users_helper.rb" with:
|
49
|
+
"""
|
50
|
+
module UsersHelper
|
51
|
+
end
|
52
|
+
"""
|
53
|
+
Given a file named "app/views/users/index.html.erb" with:
|
54
|
+
"""
|
55
|
+
<%= reverse_text('listing users'.reverse) %>
|
56
|
+
"""
|
57
|
+
Given a file named "spec/controllers/users_controller_spec.rb" with:
|
58
|
+
"""
|
59
|
+
describe UsersController do
|
60
|
+
integrate_views
|
61
|
+
it "renders a page, using a method inherited from ApplicationController" do
|
62
|
+
get :index
|
63
|
+
response.body.should include('listing users')
|
64
|
+
puts "Controller stack is functioning"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
"""
|
68
|
+
When I fire up a spork instance with "spork rspec"
|
69
|
+
And I run spec --drb spec/controllers/users_controller_spec.rb
|
70
|
+
Then the output should contain "Controller stack is functioning"
|
71
|
+
|
@@ -0,0 +1,64 @@
|
|
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
|
+
# ---- end test stuff ----
|
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
|
+
# ---- end test stuff ----
|
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
|
+
$loaded_stuff.should include('ActiveRecord::Base.establish_connection')
|
52
|
+
$loaded_stuff.should include('User')
|
53
|
+
$loaded_stuff.should include('UserObserver')
|
54
|
+
$loaded_stuff.should include('ApplicationHelper')
|
55
|
+
$loaded_stuff.should include('config/routes.rb')
|
56
|
+
$loaded_stuff.should include('each_run block')
|
57
|
+
$loaded_stuff.should include('prefork block')
|
58
|
+
puts "Specs successfully run within spork, and all initialization files were loaded"
|
59
|
+
end
|
60
|
+
end
|
61
|
+
"""
|
62
|
+
When I fire up a spork instance with "spork rspec"
|
63
|
+
And I run spec --drb spec/did_it_work_spec.rb
|
64
|
+
Then the output should contain "Specs successfully run within spork, and all initialization files were loaded"
|
@@ -11,20 +11,19 @@ Given "the application has a model, observer, route, and application helper" do
|
|
11
11
|
Given 'a file named "app/models/user.rb" with:',
|
12
12
|
"""
|
13
13
|
class User < ActiveRecord::Base
|
14
|
-
|
14
|
+
$loaded_stuff << 'User'
|
15
15
|
end
|
16
16
|
"""
|
17
|
-
|
18
|
-
Given 'a file named "app/helpers/application_helper.rb" with:',
|
17
|
+
Given 'a file named "app/models/user_observer.rb" with:',
|
19
18
|
"""
|
20
|
-
|
21
|
-
|
19
|
+
class UserObserver < ActiveRecord::Observer
|
20
|
+
$loaded_stuff << 'UserObserver'
|
22
21
|
end
|
23
22
|
"""
|
24
|
-
Given 'a file named "app/
|
23
|
+
Given 'a file named "app/helpers/application_helper.rb" with:',
|
25
24
|
"""
|
26
|
-
|
27
|
-
|
25
|
+
module ApplicationHelper
|
26
|
+
$loaded_stuff << 'ApplicationHelper'
|
28
27
|
end
|
29
28
|
"""
|
30
29
|
Given 'the following code appears in "config/environment.rb" after /Rails::Initializer.run/:',
|
@@ -33,6 +32,22 @@ Given "the application has a model, observer, route, and application helper" do
|
|
33
32
|
"""
|
34
33
|
Given 'the following code appears in "config/routes.rb" after /^end/:',
|
35
34
|
"""
|
36
|
-
|
35
|
+
$loaded_stuff << 'config/routes.rb'
|
36
|
+
"""
|
37
|
+
Given 'a file named "config/initializers/initialize_loaded_stuff.rb" with:',
|
38
|
+
"""
|
39
|
+
$loaded_stuff ||= []
|
40
|
+
"""
|
41
|
+
Given 'a file named "config/initializers/log_establish_connection_calls.rb" with:',
|
42
|
+
"""
|
43
|
+
class ActiveRecord::Base
|
44
|
+
class << self
|
45
|
+
def establish_connection_with_load_logging(*args)
|
46
|
+
establish_connection_without_load_logging(*args)
|
47
|
+
$loaded_stuff << 'ActiveRecord::Base.establish_connection'
|
48
|
+
end
|
49
|
+
alias_method_chain :establish_connection, :load_logging
|
50
|
+
end
|
51
|
+
end
|
37
52
|
"""
|
38
53
|
end
|
@@ -56,6 +56,8 @@ class Spork::AppFramework::Rails < Spork::AppFramework
|
|
56
56
|
Spork.each_run do
|
57
57
|
require application_controller_source
|
58
58
|
require application_helper_source if File.exist?(application_helper_source)
|
59
|
+
# update the rails magic to refresh the module
|
60
|
+
ApplicationController.send(:helper, ApplicationHelper)
|
59
61
|
end
|
60
62
|
end
|
61
63
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spork
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tim Harper
|
@@ -29,7 +29,8 @@ files:
|
|
29
29
|
- assets/bootstrap.rb
|
30
30
|
- features/cucumber_rails_integration.feature
|
31
31
|
- features/diagnostic_mode.feature
|
32
|
-
- features/
|
32
|
+
- features/rails_delayed_loading_workarounds.feature
|
33
|
+
- features/rspec_rails_integration.feature
|
33
34
|
- features/steps/rails_steps.rb
|
34
35
|
- features/steps/sandbox_steps.rb
|
35
36
|
- features/support/env.rb
|
@@ -1,78 +0,0 @@
|
|
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
|
-
require 'spec'
|
14
|
-
|
15
|
-
Spork.prefork do
|
16
|
-
ENV["RAILS_ENV"] = "testeroni"
|
17
|
-
$run_phase = :prefork
|
18
|
-
($loaded_stuff ||= []) << 'prefork block'
|
19
|
-
require File.dirname(__FILE__) + '/../config/environment.rb'
|
20
|
-
end
|
21
|
-
|
22
|
-
Spork.each_run do
|
23
|
-
$run_phase = :each_run
|
24
|
-
($loaded_stuff ||= []) << 'each_run block'
|
25
|
-
puts "I'm loading the stuff just for this run..."
|
26
|
-
end
|
27
|
-
|
28
|
-
class ActiveRecord::Base
|
29
|
-
class << self
|
30
|
-
def establish_connection
|
31
|
-
($loaded_stuff ||= []) << 'establish_connection'
|
32
|
-
end
|
33
|
-
end
|
34
|
-
end
|
35
|
-
"""
|
36
|
-
And the application has a model, observer, route, and application helper
|
37
|
-
And a file named "config/environments/testeroni.rb" with:
|
38
|
-
"""
|
39
|
-
$testeroni_used = true
|
40
|
-
"""
|
41
|
-
And a file named "config/database.yml" with:
|
42
|
-
"""
|
43
|
-
testeroni:
|
44
|
-
adapter: sqlite3
|
45
|
-
database: db/testeroni.sqlite3
|
46
|
-
timeout: 5000
|
47
|
-
"""
|
48
|
-
And a file named "spec/did_it_work_spec.rb" with:
|
49
|
-
"""
|
50
|
-
describe "Did it work?" do
|
51
|
-
it "checks to see if all worked" do
|
52
|
-
Spork.state.should == :using_spork
|
53
|
-
RAILS_ENV.should == 'testeroni'
|
54
|
-
$loaded_stuff.should include('establish_connection')
|
55
|
-
$loaded_stuff.should include('User')
|
56
|
-
$loaded_stuff.should include('UserObserver')
|
57
|
-
$loaded_stuff.should include('ApplicationHelper')
|
58
|
-
$loaded_stuff.should include('config/routes.rb')
|
59
|
-
$loaded_stuff.should include('each_run block')
|
60
|
-
$loaded_stuff.should include('prefork block')
|
61
|
-
puts "Specs successfully run within spork, and all initialization files were loaded"
|
62
|
-
end
|
63
|
-
end
|
64
|
-
"""
|
65
|
-
Scenario: Analyzing files were preloaded
|
66
|
-
When I run spork --diagnose
|
67
|
-
Then the output should not contain "user_observer.rb"
|
68
|
-
Then the output should not contain "user.rb"
|
69
|
-
Then the output should not contain "app/controllers/application.rb"
|
70
|
-
Then the output should not contain "app/controllers/application_controller.rb"
|
71
|
-
Then the output should not contain "app/controllers/application_helper.rb"
|
72
|
-
Then the output should not contain "config/routes.rb"
|
73
|
-
|
74
|
-
Scenario: Running spork with a rails app and observers
|
75
|
-
|
76
|
-
When I fire up a spork instance with "spork rspec"
|
77
|
-
And I run spec --drb spec/did_it_work_spec.rb
|
78
|
-
Then the output should contain "Specs successfully run within spork, and all initialization files were loaded"
|