focused_controller 0.1.0
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/.gitignore +5 -0
- data/.travis.yml +15 -0
- data/Appraisals +11 -0
- data/Gemfile +4 -0
- data/README.md +1 -0
- data/Rakefile +21 -0
- data/focused_controller.gemspec +30 -0
- data/gemfiles/rails-3-0.gemfile +7 -0
- data/gemfiles/rails-3-1.gemfile +7 -0
- data/gemfiles/rails-3-2.gemfile +7 -0
- data/lib/focused_controller.rb +4 -0
- data/lib/focused_controller/action_name.rb +6 -0
- data/lib/focused_controller/functional_test_helper.rb +25 -0
- data/lib/focused_controller/mixin.rb +44 -0
- data/lib/focused_controller/route.rb +15 -0
- data/lib/focused_controller/route_mapper.rb +58 -0
- data/lib/focused_controller/rspec_controller_class.rb +15 -0
- data/lib/focused_controller/rspec_functional_helper.rb +25 -0
- data/lib/focused_controller/rspec_helper.rb +42 -0
- data/lib/focused_controller/test_helper.rb +183 -0
- data/lib/focused_controller/version.rb +3 -0
- data/test/acceptance/app_test.rb +156 -0
- data/test/app/.gitignore +15 -0
- data/test/app/Gemfile +6 -0
- data/test/app/README.rdoc +261 -0
- data/test/app/Rakefile +7 -0
- data/test/app/app/controllers/application_controller.rb +6 -0
- data/test/app/app/controllers/posts_controller.rb +60 -0
- data/test/app/app/models/.gitkeep +0 -0
- data/test/app/app/models/post.rb +88 -0
- data/test/app/app/views/layouts/application.html.erb +13 -0
- data/test/app/app/views/posts/_form.html.erb +31 -0
- data/test/app/app/views/posts/edit.html.erb +6 -0
- data/test/app/app/views/posts/index.html.erb +23 -0
- data/test/app/app/views/posts/new.html.erb +5 -0
- data/test/app/app/views/posts/show.html.erb +8 -0
- data/test/app/config.ru +4 -0
- data/test/app/config/application.rb +16 -0
- data/test/app/config/boot.rb +6 -0
- data/test/app/config/environment.rb +5 -0
- data/test/app/config/environments/development.rb +21 -0
- data/test/app/config/environments/test.rb +29 -0
- data/test/app/config/initializers/backtrace_silencers.rb +7 -0
- data/test/app/config/initializers/inflections.rb +15 -0
- data/test/app/config/initializers/mime_types.rb +5 -0
- data/test/app/config/initializers/secret_token.rb +7 -0
- data/test/app/config/initializers/session_store.rb +8 -0
- data/test/app/config/locales/en.yml +5 -0
- data/test/app/config/routes.rb +62 -0
- data/test/app/db/seeds.rb +7 -0
- data/test/app/doc/README_FOR_APP +2 -0
- data/test/app/lib/assets/.gitkeep +0 -0
- data/test/app/lib/tasks/.gitkeep +0 -0
- data/test/app/log/.gitkeep +0 -0
- data/test/app/public/404.html +26 -0
- data/test/app/public/422.html +26 -0
- data/test/app/public/500.html +25 -0
- data/test/app/public/favicon.ico +0 -0
- data/test/app/public/index.html +241 -0
- data/test/app/public/javascripts/application.js +9663 -0
- data/test/app/public/robots.txt +5 -0
- data/test/app/public/stylesheets/application.css +83 -0
- data/test/app/script/rails +6 -0
- data/test/app/spec/controllers/posts_controller_spec.rb +59 -0
- data/test/app/spec/isolated_spec_helper.rb +9 -0
- data/test/app/spec/spec_helper.rb +5 -0
- data/test/app/spec/unit/controllers/posts_controller_isolated_spec.rb +60 -0
- data/test/app/spec/unit/controllers/posts_controller_spec.rb +59 -0
- data/test/app/test/functional/.gitkeep +0 -0
- data/test/app/test/functional/posts_controller_test.rb +67 -0
- data/test/app/test/isolated_test_helper.rb +10 -0
- data/test/app/test/test_helper.rb +6 -0
- data/test/app/test/unit/.gitkeep +0 -0
- data/test/app/test/unit/controllers/posts_controller_isolated_test.rb +69 -0
- data/test/app/test/unit/controllers/posts_controller_test.rb +67 -0
- data/test/app/vendor/assets/javascripts/.gitkeep +0 -0
- data/test/app/vendor/assets/stylesheets/.gitkeep +0 -0
- data/test/app/vendor/plugins/.gitkeep +0 -0
- data/test/helper.rb +33 -0
- data/test/unit/functional_test_helper_test.rb +65 -0
- data/test/unit/mixin_test.rb +70 -0
- data/test/unit/route_mapper_test.rb +73 -0
- data/test/unit/route_test.rb +39 -0
- data/test/unit/rspec_functional_helper.rb +42 -0
- data/test/unit/rspec_helper_test.rb +91 -0
- data/test/unit/test_helper_test.rb +235 -0
- metadata +285 -0
@@ -0,0 +1,67 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
class PostsController
|
4
|
+
class TestCase < ActiveSupport::TestCase
|
5
|
+
include FocusedController::TestHelper
|
6
|
+
|
7
|
+
setup do
|
8
|
+
@post = Post.create(:title => 'Hello', :body => 'Omg')
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class IndexTest < TestCase
|
13
|
+
test "should get index" do
|
14
|
+
req
|
15
|
+
assert_response :success
|
16
|
+
assert_not_nil controller.posts
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
class NewTest < TestCase
|
21
|
+
test "should get new" do
|
22
|
+
req
|
23
|
+
assert_response :success
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
class CreateTest < TestCase
|
28
|
+
test "should create post" do
|
29
|
+
assert_difference('Post.count') do
|
30
|
+
req :post => @post.attributes
|
31
|
+
end
|
32
|
+
|
33
|
+
assert_redirected_to post_path(controller.post)
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class ShowTest < TestCase
|
38
|
+
test "should show post" do
|
39
|
+
req :id => @post.id
|
40
|
+
assert_response :success
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
class EditTest < TestCase
|
45
|
+
test "should get edit" do
|
46
|
+
req :id => @post.id
|
47
|
+
assert_response :success
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
class UpdateTest < TestCase
|
52
|
+
test "should update post" do
|
53
|
+
req :id => @post.id
|
54
|
+
assert_redirected_to post_path(controller.post)
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
class DestroyTest < TestCase
|
59
|
+
test "should destroy post" do
|
60
|
+
assert_difference('Post.count', -1) do
|
61
|
+
req :id => @post.id
|
62
|
+
end
|
63
|
+
|
64
|
+
assert_redirected_to posts_path
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
data/test/helper.rb
ADDED
@@ -0,0 +1,33 @@
|
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'test/unit/testcase'
|
3
|
+
require 'active_support/test_case'
|
4
|
+
require 'minitest/spec'
|
5
|
+
require 'minitest/autorun'
|
6
|
+
require 'focused_controller'
|
7
|
+
require 'pathname'
|
8
|
+
require 'ostruct'
|
9
|
+
require 'rspec/core'
|
10
|
+
|
11
|
+
TEST_ROOT = File.expand_path('..', __FILE__)
|
12
|
+
|
13
|
+
# Don't want to actually use RSpec to run our tests
|
14
|
+
module RSpec::Core::DSL
|
15
|
+
remove_method :describe
|
16
|
+
end
|
17
|
+
|
18
|
+
# Annoying monkey-patches. "require 'rspec/rails'" pulls in 'capybara/rails', if it
|
19
|
+
# can, and capybara/rails assumes there is a full rails env present. So this is a
|
20
|
+
# hack to make it not fail.
|
21
|
+
module Rails
|
22
|
+
def self.version
|
23
|
+
'3.0'
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.root
|
27
|
+
Pathname.new('')
|
28
|
+
end
|
29
|
+
|
30
|
+
def self.application
|
31
|
+
OpenStruct.new(:env_config => {}, :env_defaults => {})
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'focused_controller/functional_test_helper'
|
3
|
+
require 'action_controller'
|
4
|
+
|
5
|
+
module FocusedController
|
6
|
+
module FunctionalTestHelper
|
7
|
+
class FakePostsController
|
8
|
+
class Action < ActionController::Base; end
|
9
|
+
class Index < Action; end
|
10
|
+
class Show < Action; end
|
11
|
+
|
12
|
+
class TestCase < ActionController::TestCase
|
13
|
+
include FocusedController::FunctionalTestHelper
|
14
|
+
|
15
|
+
def initialize(method_name = :foo)
|
16
|
+
super
|
17
|
+
end
|
18
|
+
|
19
|
+
def foo; end
|
20
|
+
end
|
21
|
+
|
22
|
+
class IndexTest < TestCase
|
23
|
+
end
|
24
|
+
|
25
|
+
class ShowTest < TestCase
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
describe FunctionalTestHelper do
|
30
|
+
subject { FakePostsController::IndexTest.new }
|
31
|
+
|
32
|
+
it 'automatically determines the controller class' do
|
33
|
+
FakePostsController::IndexTest.controller_class.
|
34
|
+
must_equal FakePostsController::Index
|
35
|
+
FakePostsController::ShowTest.controller_class.
|
36
|
+
must_equal FakePostsController::Show
|
37
|
+
end
|
38
|
+
|
39
|
+
it "doesn't require using the action name to dispatch the action" do
|
40
|
+
subject.singleton_class.class_eval do
|
41
|
+
attr_reader :last_process
|
42
|
+
|
43
|
+
def process(*args)
|
44
|
+
@last_process = args
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
subject.get :foo, :bar, :baz
|
49
|
+
subject.last_process.must_equal ['run', :foo, :bar, :baz, 'GET']
|
50
|
+
|
51
|
+
subject.post :foo, :bar, :baz
|
52
|
+
subject.last_process.must_equal ['run', :foo, :bar, :baz, 'POST']
|
53
|
+
|
54
|
+
subject.put :foo, :bar, :baz
|
55
|
+
subject.last_process.must_equal ['run', :foo, :bar, :baz, 'PUT']
|
56
|
+
|
57
|
+
subject.delete :foo, :bar, :baz
|
58
|
+
subject.last_process.must_equal ['run', :foo, :bar, :baz, 'DELETE']
|
59
|
+
|
60
|
+
subject.head :foo, :bar, :baz
|
61
|
+
subject.last_process.must_equal ['run', :foo, :bar, :baz, 'HEAD']
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'action_controller'
|
3
|
+
|
4
|
+
module FocusedController
|
5
|
+
module Test
|
6
|
+
class MixinTestBaseController
|
7
|
+
def view_assigns
|
8
|
+
{'some' => 'var'}
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class MixinTestController < ActionController::Base
|
13
|
+
include FocusedController::Mixin
|
14
|
+
|
15
|
+
class << self
|
16
|
+
attr_accessor :name
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
module FocusedController
|
23
|
+
describe Mixin do
|
24
|
+
describe "with a PostsController::Show class" do
|
25
|
+
let(:klass) do
|
26
|
+
klass = Class.new(FocusedController::Test::MixinTestController)
|
27
|
+
klass.name = "PostsController::Show"
|
28
|
+
klass
|
29
|
+
end
|
30
|
+
|
31
|
+
subject { klass.new }
|
32
|
+
|
33
|
+
it "has a .controller_path of 'posts'" do
|
34
|
+
klass.controller_path.must_equal 'posts'
|
35
|
+
end
|
36
|
+
|
37
|
+
it "has a .call which dispatches the #run action" do
|
38
|
+
def klass.action(name)
|
39
|
+
if name.to_s == 'run'
|
40
|
+
proc { |env| "omg" }
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
klass.call(nil).must_equal "omg"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "has an #action_name of 'show'" do
|
48
|
+
subject.action_name.must_equal 'show'
|
49
|
+
end
|
50
|
+
|
51
|
+
it "uses the run method for the action" do
|
52
|
+
subject.method_for_action('whatever').must_equal 'run'
|
53
|
+
end
|
54
|
+
|
55
|
+
it "removes all view assigns by default" do
|
56
|
+
subject.view_assigns.must_equal({})
|
57
|
+
end
|
58
|
+
|
59
|
+
it "can be configured to allow view assigns" do
|
60
|
+
subject.class.allow_view_assigns = true
|
61
|
+
subject.instance_variable_set('@foo', 'bar')
|
62
|
+
subject.view_assigns['foo'].must_equal('bar')
|
63
|
+
end
|
64
|
+
|
65
|
+
it "has a #run method by default" do
|
66
|
+
subject.run.must_equal nil
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
# RouteSet is missing some requires
|
4
|
+
require 'active_support/core_ext/uri'
|
5
|
+
require 'active_support/core_ext/enumerable'
|
6
|
+
|
7
|
+
module FocusedController
|
8
|
+
describe RouteMapper do
|
9
|
+
let(:route_set) { ActionDispatch::Routing::RouteSet.new }
|
10
|
+
|
11
|
+
def recognize(path, environment = {})
|
12
|
+
method = (environment[:method] || "GET").to_s.upcase
|
13
|
+
env = Rack::MockRequest.env_for(path, {:method => method})
|
14
|
+
req = route_set.request_class.new(env)
|
15
|
+
|
16
|
+
if route_set.respond_to?(:router)
|
17
|
+
router = route_set.router # Rails 3.2+
|
18
|
+
else
|
19
|
+
router = route_set.set # Rails 3.0, 3.1
|
20
|
+
end
|
21
|
+
|
22
|
+
router.recognize(req) do |route, matches, params|
|
23
|
+
return route
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'creates routes that map to focused controllers' do
|
28
|
+
route_set.draw do
|
29
|
+
focused_controller_routes do
|
30
|
+
match 'posts' => 'PostsController::Index'
|
31
|
+
|
32
|
+
resources :comments do
|
33
|
+
resources :replies
|
34
|
+
end
|
35
|
+
|
36
|
+
resource :account
|
37
|
+
|
38
|
+
namespace :admin do
|
39
|
+
resources :comments
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
mappings = {
|
45
|
+
[:get, '/posts'] => 'PostsController::Index',
|
46
|
+
[:get, '/comments'] => 'CommentsController::Index',
|
47
|
+
[:get, '/comments/4'] => 'CommentsController::Show',
|
48
|
+
[:put, '/comments/4'] => 'CommentsController::Update',
|
49
|
+
[:get, '/account'] => 'AccountsController::Show',
|
50
|
+
[:get, '/comments/4/replies'] => 'RepliesController::Index',
|
51
|
+
[:get, '/admin/comments'] => 'Admin::CommentsController::Index'
|
52
|
+
}
|
53
|
+
|
54
|
+
mappings.each do |(method, path), controller|
|
55
|
+
route = recognize(path, :method => method)
|
56
|
+
route.app.name.must_equal controller
|
57
|
+
route.defaults[:action].must_equal 'run'
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
it "doesn't mess with callable routes" do
|
62
|
+
app = Object.new
|
63
|
+
def app.call; end
|
64
|
+
|
65
|
+
route_set.draw do
|
66
|
+
focused_controller_routes do
|
67
|
+
match 'posts' => app
|
68
|
+
end
|
69
|
+
end
|
70
|
+
recognize('/posts').app.must_equal app
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
module FocusedController
|
4
|
+
module Test
|
5
|
+
end
|
6
|
+
|
7
|
+
describe Route do
|
8
|
+
let(:controller) { Object.new }
|
9
|
+
subject { Route.new('FocusedController::Test::RouteTestController') }
|
10
|
+
|
11
|
+
before do
|
12
|
+
Test.const_set(:RouteTestController, controller)
|
13
|
+
end
|
14
|
+
|
15
|
+
after do
|
16
|
+
Test.send(:remove_const, :RouteTestController)
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '#call' do
|
20
|
+
it 'constantizes the name and invokes #call on the constant' do
|
21
|
+
env, resp = Object.new, Object.new
|
22
|
+
|
23
|
+
# Not using MiniTest::Mock for this because it caused problems
|
24
|
+
# with Rubinius
|
25
|
+
controller.singleton_class.send :define_method, :call do |call_env|
|
26
|
+
resp if call_env == env
|
27
|
+
end
|
28
|
+
|
29
|
+
subject.call(env).must_equal resp
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
describe '#to_s' do
|
34
|
+
it "returns the the name" do
|
35
|
+
subject.to_s.must_equal 'FocusedController::Test::RouteTestController'
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'focused_controller/rspec_functional_helper'
|
3
|
+
|
4
|
+
module FocusedController
|
5
|
+
module RSpecFunctionalHelper
|
6
|
+
class FakePostsController
|
7
|
+
class Action < ActionController::Base; end
|
8
|
+
class Index < Action; end
|
9
|
+
class Show < Action; end
|
10
|
+
end
|
11
|
+
|
12
|
+
index_spec = RSpec::Core::ExampleGroup.describe FakePostsController::Index do
|
13
|
+
include RSpec::Rails::ControllerExampleGroup
|
14
|
+
include FocusedController::RSpecFunctionalHelper
|
15
|
+
end
|
16
|
+
|
17
|
+
show_spec = nil
|
18
|
+
inner_show_spec = nil
|
19
|
+
RSpec::Core::ExampleGroup.describe FakePostsController do
|
20
|
+
include RSpec::Rails::ControllerExampleGroup
|
21
|
+
include FocusedController::RSpecFunctionalHelper
|
22
|
+
|
23
|
+
show_spec = describe(FakePostsController::Show) do
|
24
|
+
inner_show_spec = describe('foo') { }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
describe RSpecFunctionalHelper do
|
29
|
+
subject { index_spec.new }
|
30
|
+
|
31
|
+
it 'automatically determines the controller class' do
|
32
|
+
index_spec.controller_class.must_equal FakePostsController::Index
|
33
|
+
show_spec.controller_class.must_equal FakePostsController::Show
|
34
|
+
inner_show_spec.controller_class.must_equal FakePostsController::Show
|
35
|
+
end
|
36
|
+
|
37
|
+
it 'includes the FocusedController::FunctionalTestHelper' do
|
38
|
+
subject.is_a?(FocusedController::FunctionalTestHelper).must_equal true
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
@@ -0,0 +1,91 @@
|
|
1
|
+
require 'helper'
|
2
|
+
require 'action_controller'
|
3
|
+
require 'focused_controller/rspec_helper'
|
4
|
+
|
5
|
+
module FocusedController
|
6
|
+
module RSpecHelper
|
7
|
+
module FakePostsController
|
8
|
+
class Action < ActionController::Base
|
9
|
+
end
|
10
|
+
|
11
|
+
class Index < Action
|
12
|
+
end
|
13
|
+
|
14
|
+
class Show < Action
|
15
|
+
end
|
16
|
+
|
17
|
+
class Edit < Action
|
18
|
+
end
|
19
|
+
|
20
|
+
class Destroy < Action
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
index_spec = RSpec::Core::ExampleGroup.describe FakePostsController::Index do
|
25
|
+
include FocusedController::RSpecHelper
|
26
|
+
end
|
27
|
+
|
28
|
+
show_spec = nil
|
29
|
+
inner_show_spec = nil
|
30
|
+
RSpec::Core::ExampleGroup.describe FakePostsController do
|
31
|
+
show_spec = describe FakePostsController::Show do
|
32
|
+
include FocusedController::RSpecHelper
|
33
|
+
|
34
|
+
inner_show_spec = describe 'foo' do
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
edit_spec = RSpec::Core::ExampleGroup.describe "the edit action" do
|
40
|
+
include FocusedController::RSpecHelper
|
41
|
+
self.controller_class = FakePostsController::Edit
|
42
|
+
end
|
43
|
+
|
44
|
+
describe RSpecHelper do
|
45
|
+
it 'finds the correct controller class' do
|
46
|
+
index_spec.controller_class.must_equal FakePostsController::Index
|
47
|
+
show_spec.controller_class.must_equal FakePostsController::Show
|
48
|
+
inner_show_spec.controller_class.must_equal FakePostsController::Show
|
49
|
+
edit_spec.controller_class.must_equal FakePostsController::Edit
|
50
|
+
end
|
51
|
+
|
52
|
+
subject { index_spec.new }
|
53
|
+
|
54
|
+
def must_fail(&block)
|
55
|
+
block.must_raise RSpec::Expectations::ExpectationNotMetError
|
56
|
+
end
|
57
|
+
|
58
|
+
def must_succeed(&block)
|
59
|
+
block.call
|
60
|
+
true.must_equal true # to count the assertion
|
61
|
+
end
|
62
|
+
|
63
|
+
it 'has a redirect_to matcher' do
|
64
|
+
must_fail { subject.should subject.redirect_to('/foo') }
|
65
|
+
subject.controller.redirect_to('/foo')
|
66
|
+
must_succeed { subject.should subject.redirect_to('/foo') }
|
67
|
+
end
|
68
|
+
|
69
|
+
it 'matches response type' do
|
70
|
+
must_succeed { subject.response.should subject.be_success }
|
71
|
+
must_fail { subject.response.should subject.be_error }
|
72
|
+
|
73
|
+
subject.controller.render :status => :not_found
|
74
|
+
|
75
|
+
must_fail { subject.response.should subject.be_success }
|
76
|
+
must_succeed { subject.response.should subject.be_missing }
|
77
|
+
end
|
78
|
+
|
79
|
+
it 'has a render_template matcher' do
|
80
|
+
subject.controller.render :foo
|
81
|
+
|
82
|
+
must_succeed { subject.response.should subject.render_template(:foo) }
|
83
|
+
must_fail { subject.response.should subject.render_template(:bar) }
|
84
|
+
end
|
85
|
+
|
86
|
+
it 'sets the subject to be the controller instance' do
|
87
|
+
subject.subject.must_equal subject.controller
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|