rspec-rails 2.99.0 → 3.0.0.beta1
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.
- checksums.yaml +8 -8
- checksums.yaml.gz.sig +2 -0
- data.tar.gz.sig +0 -0
- data/Changelog.md +40 -68
- data/License.txt +1 -0
- data/README.md +6 -4
- data/features/Generators.md +24 -0
- data/features/GettingStarted.md +84 -0
- data/features/README.md +56 -0
- data/features/RailsVersions.md +4 -0
- data/features/Transactions.md +84 -0
- data/features/Upgrade.md +121 -0
- data/features/controller_specs/Cookies.md +57 -0
- data/features/controller_specs/README.md +45 -0
- data/features/controller_specs/anonymous_controller.feature +378 -0
- data/features/controller_specs/bypass_rescue.feature +75 -0
- data/features/controller_specs/controller_spec.feature +58 -0
- data/features/controller_specs/engine_routes.feature +51 -0
- data/features/controller_specs/isolation_from_views.feature +87 -0
- data/features/controller_specs/render_views.feature +114 -0
- data/features/directory_structure.feature +71 -0
- data/features/feature_specs/feature_spec.feature +35 -0
- data/features/helper_specs/helper_spec.feature +122 -0
- data/features/mailer_specs/url_helpers.feature +38 -0
- data/features/matchers/README.md +18 -0
- data/features/matchers/new_record_matcher.feature +41 -0
- data/features/matchers/redirect_to_matcher.feature +40 -0
- data/features/matchers/relation_match_array.feature +27 -0
- data/features/matchers/render_template_matcher.feature +49 -0
- data/features/mocks/mock_model.feature +147 -0
- data/features/mocks/stub_model.feature +58 -0
- data/features/model_specs/README.md +21 -0
- data/features/model_specs/errors_on.feature +51 -0
- data/features/model_specs/records.feature +27 -0
- data/features/model_specs/transactional_examples.feature +109 -0
- data/features/request_specs/request_spec.feature +49 -0
- data/features/routing_specs/README.md +16 -0
- data/features/routing_specs/be_routable_matcher.feature +80 -0
- data/features/routing_specs/engine_routes.feature +38 -0
- data/features/routing_specs/named_routes.feature +18 -0
- data/features/routing_specs/route_to_matcher.feature +90 -0
- data/features/step_definitions/additional_cli_steps.rb +4 -0
- data/features/step_definitions/model_steps.rb +3 -0
- data/features/support/capybara.rb +7 -0
- data/features/support/env.rb +53 -0
- data/features/support/rails_versions.rb +4 -0
- data/features/support/rubinius.rb +6 -0
- data/features/view_specs/inferred_controller_path.feature +45 -0
- data/features/view_specs/stub_template.feature +51 -0
- data/features/view_specs/view_spec.feature +206 -0
- data/lib/generators/rspec/controller/templates/controller_spec.rb +1 -1
- data/lib/generators/rspec/install/templates/spec/spec_helper.rb.tt +2 -21
- data/lib/generators/rspec/integration/integration_generator.rb +2 -3
- data/lib/generators/rspec/integration/templates/request_spec.rb +1 -1
- data/lib/generators/rspec/mailer/templates/mailer_spec.rb +4 -4
- data/lib/generators/rspec/scaffold/scaffold_generator.rb +2 -3
- data/lib/generators/rspec/scaffold/templates/controller_spec.rb +16 -16
- data/lib/generators/rspec/scaffold/templates/edit_spec.rb +2 -2
- data/lib/generators/rspec/scaffold/templates/index_spec.rb +1 -1
- data/lib/generators/rspec/scaffold/templates/new_spec.rb +2 -2
- data/lib/generators/rspec/scaffold/templates/routing_spec.rb +7 -7
- data/lib/generators/rspec/scaffold/templates/show_spec.rb +2 -2
- data/lib/rspec/rails.rb +0 -5
- data/lib/rspec/rails/adapters.rb +5 -12
- data/lib/rspec/rails/example.rb +55 -24
- data/lib/rspec/rails/example/controller_example_group.rb +7 -31
- data/lib/rspec/rails/example/view_example_group.rb +0 -3
- data/lib/rspec/rails/matchers.rb +1 -2
- data/lib/rspec/rails/matchers/be_a_new.rb +1 -1
- data/lib/rspec/rails/matchers/be_new_record.rb +1 -1
- data/lib/rspec/rails/matchers/be_valid.rb +1 -1
- data/lib/rspec/rails/matchers/have_rendered.rb +1 -1
- data/lib/rspec/rails/matchers/redirect_to.rb +1 -1
- data/lib/rspec/rails/matchers/relation_match_array.rb +1 -1
- data/lib/rspec/rails/matchers/routing_matchers.rb +6 -10
- data/lib/rspec/rails/mocks.rb +5 -41
- data/lib/rspec/rails/tasks/rspec.rake +5 -12
- data/lib/rspec/rails/vendor/capybara.rb +4 -35
- data/lib/rspec/rails/version.rb +1 -1
- data/spec/generators/rspec/controller/controller_generator_spec.rb +97 -0
- data/spec/generators/rspec/helper/helper_generator_spec.rb +30 -0
- data/spec/generators/rspec/install/install_generator_spec.rb +30 -0
- data/spec/generators/rspec/integration/integration_generator_spec.rb +44 -0
- data/spec/generators/rspec/mailer/mailer_generator_spec.rb +48 -0
- data/spec/generators/rspec/model/model_generator_spec.rb +52 -0
- data/spec/generators/rspec/observer/observer_generator_spec.rb +21 -0
- data/spec/generators/rspec/scaffold/scaffold_generator_spec.rb +138 -0
- data/spec/generators/rspec/view/view_generator_spec.rb +41 -0
- data/spec/rspec/rails/assertion_adapter_spec.rb +28 -0
- data/spec/rspec/rails/assertion_delegator_spec.rb +43 -0
- data/spec/rspec/rails/configuration_spec.rb +26 -0
- data/spec/rspec/rails/deprecations_spec.rb +18 -0
- data/spec/rspec/rails/example/controller_example_group_spec.rb +100 -0
- data/spec/rspec/rails/example/feature_example_group_spec.rb +56 -0
- data/spec/rspec/rails/example/helper_example_group_spec.rb +66 -0
- data/spec/rspec/rails/example/mailer_example_group_spec.rb +21 -0
- data/spec/rspec/rails/example/model_example_group_spec.rb +15 -0
- data/spec/rspec/rails/example/request_example_group_spec.rb +17 -0
- data/spec/rspec/rails/example/routing_example_group_spec.rb +32 -0
- data/spec/rspec/rails/example/view_example_group_spec.rb +220 -0
- data/spec/rspec/rails/extensions/active_model/errors_on_spec.rb +23 -0
- data/spec/rspec/rails/extensions/active_record/base_spec.rb +42 -0
- data/spec/rspec/rails/fixture_support_spec.rb +17 -0
- data/spec/rspec/rails/matchers/be_a_new_spec.rb +142 -0
- data/spec/rspec/rails/matchers/be_new_record_spec.rb +33 -0
- data/spec/rspec/rails/matchers/be_routable_spec.rb +41 -0
- data/spec/rspec/rails/matchers/be_valid_spec.rb +44 -0
- data/spec/rspec/rails/matchers/has_spec.rb +29 -0
- data/spec/rspec/rails/matchers/have_rendered_spec.rb +93 -0
- data/spec/rspec/rails/matchers/redirect_to_spec.rb +80 -0
- data/spec/rspec/rails/matchers/relation_match_array_spec.rb +31 -0
- data/spec/rspec/rails/matchers/route_to_spec.rb +151 -0
- data/spec/rspec/rails/minitest_lifecycle_adapter_spec.rb +22 -0
- data/spec/rspec/rails/mocks/mock_model_spec.rb +378 -0
- data/spec/rspec/rails/mocks/stub_model_spec.rb +154 -0
- data/spec/rspec/rails/setup_and_teardown_adapter_spec.rb +32 -0
- data/spec/rspec/rails/view_rendering_spec.rb +111 -0
- data/spec/spec_helper.rb +35 -0
- data/spec/support/ar_classes.rb +42 -0
- data/spec/support/helpers.rb +20 -0
- data/spec/support/matchers.rb +9 -0
- data/spec/support/null_object.rb +6 -0
- metadata +229 -42
- metadata.gz.sig +0 -0
- data/lib/autotest/rails_rspec2.rb +0 -91
- data/lib/rspec/rails/infer_type_configuration.rb +0 -26
- data/lib/rspec/rails/matchers/have_extension.rb +0 -36
- data/lib/rspec/rails/module_inclusion.rb +0 -19
@@ -0,0 +1,26 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "configuration" do
|
4
|
+
before do
|
5
|
+
@orig_render_views = RSpec.configuration.render_views?
|
6
|
+
end
|
7
|
+
|
8
|
+
after do
|
9
|
+
RSpec.configuration.render_views = @orig_render_views
|
10
|
+
end
|
11
|
+
|
12
|
+
describe "#render_views?" do
|
13
|
+
it "is false by default" do
|
14
|
+
RSpec.configuration.render_views?.should be_falsey
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
describe "#render_views" do
|
19
|
+
it "sets render_views? to return true" do
|
20
|
+
RSpec.configuration.render_views = false
|
21
|
+
RSpec.configuration.render_views
|
22
|
+
|
23
|
+
RSpec.configuration.render_views?.should be_truthy
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe "rspec-rails-2 deprecations" do
|
4
|
+
context "controller specs" do
|
5
|
+
describe "::integrate_views" do
|
6
|
+
let(:group) do
|
7
|
+
RSpec::Core::ExampleGroup.describe do
|
8
|
+
include RSpec::Rails::ControllerExampleGroup
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
it "is deprecated" do
|
13
|
+
RSpec.should_receive(:deprecate)
|
14
|
+
group.integrate_views
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
class ::ApplicationController
|
4
|
+
end
|
5
|
+
|
6
|
+
module RSpec::Rails
|
7
|
+
describe ControllerExampleGroup do
|
8
|
+
it { should be_included_in_files_in('./spec/controllers/') }
|
9
|
+
it { should be_included_in_files_in('.\\spec\\controllers\\') }
|
10
|
+
|
11
|
+
let(:group) do
|
12
|
+
RSpec::Core::ExampleGroup.describe do
|
13
|
+
include ControllerExampleGroup
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
it "includes routing matchers" do
|
18
|
+
group.included_modules.should include(RSpec::Rails::Matchers::RoutingMatchers)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "adds :type => :controller to the metadata" do
|
22
|
+
group.metadata[:type].should eq(:controller)
|
23
|
+
end
|
24
|
+
|
25
|
+
context "with implicit subject" do
|
26
|
+
it "uses the controller as the subject" do
|
27
|
+
controller = double('controller')
|
28
|
+
example = group.new
|
29
|
+
example.stub(:controller => controller)
|
30
|
+
example.subject.should == controller
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context "with explicit subject" do
|
35
|
+
it "uses the specified subject instead of the controller" do
|
36
|
+
group.subject { 'explicit' }
|
37
|
+
example = group.new
|
38
|
+
example.subject.should == 'explicit'
|
39
|
+
end
|
40
|
+
end
|
41
|
+
|
42
|
+
describe "#controller" do
|
43
|
+
before do
|
44
|
+
group.class_eval do
|
45
|
+
controller(Class.new) { }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
it "delegates named route helpers to the underlying controller" do
|
50
|
+
controller = double('controller')
|
51
|
+
controller.stub(:foos_url).and_return('http://test.host/foos')
|
52
|
+
|
53
|
+
example = group.new
|
54
|
+
example.stub(:controller => controller)
|
55
|
+
|
56
|
+
# As in the routing example spec, this is pretty invasive, but not sure
|
57
|
+
# how to do it any other way as the correct operation relies on before
|
58
|
+
# hooks
|
59
|
+
routes = ActionDispatch::Routing::RouteSet.new
|
60
|
+
routes.draw { resources :foos }
|
61
|
+
example.instance_variable_set(:@orig_routes, routes)
|
62
|
+
|
63
|
+
example.foos_url.should eq('http://test.host/foos')
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
describe "#bypass_rescue" do
|
68
|
+
it "overrides the rescue_with_handler method on the controller to raise submitted error" do
|
69
|
+
example = group.new
|
70
|
+
example.instance_variable_set("@controller", Class.new { def rescue_with_handler(e); end }.new)
|
71
|
+
example.bypass_rescue
|
72
|
+
expect do
|
73
|
+
example.controller.rescue_with_handler(RuntimeError.new("foo"))
|
74
|
+
end.to raise_error("foo")
|
75
|
+
end
|
76
|
+
end
|
77
|
+
|
78
|
+
describe "with inferred anonymous controller" do
|
79
|
+
before do
|
80
|
+
group.stub(:controller_class).and_return(Class.new)
|
81
|
+
end
|
82
|
+
|
83
|
+
it "infers the anonymous controller class when infer_base_class_for_anonymous_controllers is true" do
|
84
|
+
RSpec.configuration.stub(:infer_base_class_for_anonymous_controllers?).and_return(true)
|
85
|
+
group.controller { }
|
86
|
+
|
87
|
+
controller_class = group.metadata[:example_group][:described_class]
|
88
|
+
controller_class.superclass.should eq(group.controller_class)
|
89
|
+
end
|
90
|
+
|
91
|
+
it "sets the anonymous controller class to ApplicationController when infer_base_class_for_anonymous_controllers is false" do
|
92
|
+
RSpec.configuration.stub(:infer_base_class_for_anonymous_controllers?).and_return(false)
|
93
|
+
group.controller { }
|
94
|
+
|
95
|
+
controller_class = group.metadata[:example_group][:described_class]
|
96
|
+
controller_class.superclass.should eq(ApplicationController)
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|
@@ -0,0 +1,56 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module RSpec::Rails
|
4
|
+
describe FeatureExampleGroup do
|
5
|
+
it { should be_included_in_files_in('./spec/features/') }
|
6
|
+
it { should be_included_in_files_in('.\\spec\\features\\') }
|
7
|
+
|
8
|
+
it "adds :type => :feature to the metadata" do
|
9
|
+
group = RSpec::Core::ExampleGroup.describe do
|
10
|
+
include FeatureExampleGroup
|
11
|
+
end
|
12
|
+
|
13
|
+
expect(group.metadata[:type]).to eq(:feature)
|
14
|
+
end
|
15
|
+
|
16
|
+
it "includes Rails route helpers" do
|
17
|
+
Rails.application.routes.draw do
|
18
|
+
get "/foo", :as => :foo, :to => "foo#bar"
|
19
|
+
end
|
20
|
+
|
21
|
+
group = RSpec::Core::ExampleGroup.describe do
|
22
|
+
include FeatureExampleGroup
|
23
|
+
end
|
24
|
+
|
25
|
+
expect(group.new.foo_path).to eq("/foo")
|
26
|
+
expect(group.new.foo_url).to eq("http://www.example.com/foo")
|
27
|
+
end
|
28
|
+
|
29
|
+
describe "#visit" do
|
30
|
+
it "raises an error informing about missing Capybara" do
|
31
|
+
group = RSpec::Core::ExampleGroup.describe do
|
32
|
+
include FeatureExampleGroup
|
33
|
+
end
|
34
|
+
|
35
|
+
expect {
|
36
|
+
group.new.visit('/foobar')
|
37
|
+
}.to raise_error(/Capybara not loaded/)
|
38
|
+
end
|
39
|
+
|
40
|
+
it "is resistant to load order errors" do
|
41
|
+
capybara = Module.new do
|
42
|
+
def visit(url)
|
43
|
+
"success: #{url}"
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
group = RSpec::Core::ExampleGroup.describe do
|
48
|
+
include capybara
|
49
|
+
include FeatureExampleGroup
|
50
|
+
end
|
51
|
+
|
52
|
+
expect(group.new.visit("/foo")).to eq("success: /foo")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module RSpec::Rails
|
4
|
+
describe HelperExampleGroup do
|
5
|
+
module ::FoosHelper; end
|
6
|
+
subject { HelperExampleGroup }
|
7
|
+
|
8
|
+
it { should be_included_in_files_in('./spec/helpers/') }
|
9
|
+
it { should be_included_in_files_in('.\\spec\\helpers\\') }
|
10
|
+
|
11
|
+
it "provides a controller_path based on the helper module's name" do
|
12
|
+
example = double
|
13
|
+
example.stub_chain(:example_group, :described_class) { FoosHelper }
|
14
|
+
|
15
|
+
helper_spec = Object.new.extend HelperExampleGroup
|
16
|
+
helper_spec.__send__(:_controller_path, example).should == "foos"
|
17
|
+
end
|
18
|
+
|
19
|
+
it "adds :type => :helper to the metadata" do
|
20
|
+
group = RSpec::Core::ExampleGroup.describe do
|
21
|
+
include HelperExampleGroup
|
22
|
+
end
|
23
|
+
group.metadata[:type].should eq(:helper)
|
24
|
+
end
|
25
|
+
|
26
|
+
describe "#helper" do
|
27
|
+
it "returns the instance of AV::Base provided by AV::TC::Behavior" do
|
28
|
+
helper_spec = Object.new.extend HelperExampleGroup
|
29
|
+
helper_spec.should_receive(:view_assigns)
|
30
|
+
av_tc_b_view = double('_view')
|
31
|
+
av_tc_b_view.should_receive(:assign)
|
32
|
+
helper_spec.stub(:_view) { av_tc_b_view }
|
33
|
+
helper_spec.helper.should eq(av_tc_b_view)
|
34
|
+
end
|
35
|
+
|
36
|
+
before do
|
37
|
+
Object.const_set(:ApplicationHelper, Module.new)
|
38
|
+
end
|
39
|
+
|
40
|
+
after do
|
41
|
+
Object.__send__(:remove_const, :ApplicationHelper)
|
42
|
+
end
|
43
|
+
|
44
|
+
it "includes ApplicationHelper" do
|
45
|
+
group = RSpec::Core::ExampleGroup.describe do
|
46
|
+
include HelperExampleGroup
|
47
|
+
def _view
|
48
|
+
ActionView::Base.new
|
49
|
+
end
|
50
|
+
end
|
51
|
+
group.new.helper.should be_kind_of(ApplicationHelper)
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
describe HelperExampleGroup::ClassMethods do
|
57
|
+
describe "determine_default_helper_class" do
|
58
|
+
it "returns the helper module passed to describe" do
|
59
|
+
helper_spec = Object.new.extend HelperExampleGroup::ClassMethods
|
60
|
+
helper_spec.stub(:described_class) { FoosHelper }
|
61
|
+
helper_spec.determine_default_helper_class("ignore this").
|
62
|
+
should eq(FoosHelper)
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module RSpec::Rails
|
4
|
+
describe MailerExampleGroup do
|
5
|
+
module ::Rails; end
|
6
|
+
before do
|
7
|
+
Rails.stub_chain(:application, :routes, :url_helpers).and_return(Rails)
|
8
|
+
Rails.stub_chain(:configuration, :action_mailer, :default_url_options).and_return({})
|
9
|
+
end
|
10
|
+
|
11
|
+
it { should be_included_in_files_in('./spec/mailers/') }
|
12
|
+
it { should be_included_in_files_in('.\\spec\\mailers\\') }
|
13
|
+
|
14
|
+
it "adds :type => :mailer to the metadata" do
|
15
|
+
group = RSpec::Core::ExampleGroup.describe do
|
16
|
+
include MailerExampleGroup
|
17
|
+
end
|
18
|
+
group.metadata[:type].should eq(:mailer)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module RSpec::Rails
|
4
|
+
describe ModelExampleGroup do
|
5
|
+
it { should be_included_in_files_in('./spec/models/') }
|
6
|
+
it { should be_included_in_files_in('.\\spec\\models\\') }
|
7
|
+
|
8
|
+
it "adds :type => :model to the metadata" do
|
9
|
+
group = RSpec::Core::ExampleGroup.describe do
|
10
|
+
include ModelExampleGroup
|
11
|
+
end
|
12
|
+
group.metadata[:type].should eq(:model)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module RSpec::Rails
|
4
|
+
describe RequestExampleGroup do
|
5
|
+
it { should be_included_in_files_in('./spec/requests/') }
|
6
|
+
it { should be_included_in_files_in('./spec/integration/') }
|
7
|
+
it { should be_included_in_files_in('.\\spec\\requests\\') }
|
8
|
+
it { should be_included_in_files_in('.\\spec\\integration\\') }
|
9
|
+
|
10
|
+
it "adds :type => :request to the metadata" do
|
11
|
+
group = RSpec::Core::ExampleGroup.describe do
|
12
|
+
include RequestExampleGroup
|
13
|
+
end
|
14
|
+
group.metadata[:type].should eq(:request)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module RSpec::Rails
|
4
|
+
describe RoutingExampleGroup do
|
5
|
+
it { should be_included_in_files_in('./spec/routing/') }
|
6
|
+
it { should be_included_in_files_in('.\\spec\\routing\\') }
|
7
|
+
|
8
|
+
it "adds :type => :routing to the metadata" do
|
9
|
+
group = RSpec::Core::ExampleGroup.describe do
|
10
|
+
include RoutingExampleGroup
|
11
|
+
end
|
12
|
+
group.metadata[:type].should eq(:routing)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe "named routes" do
|
16
|
+
it "delegates them to the route_set" do
|
17
|
+
group = RSpec::Core::ExampleGroup.describe do
|
18
|
+
include RoutingExampleGroup
|
19
|
+
end
|
20
|
+
|
21
|
+
example = group.new
|
22
|
+
|
23
|
+
# Yes, this is quite invasive
|
24
|
+
url_helpers = double('url_helpers', :foo_path => "foo")
|
25
|
+
routes = double('routes', :url_helpers => url_helpers)
|
26
|
+
example.stub(:routes => routes)
|
27
|
+
|
28
|
+
example.foo_path.should == "foo"
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,220 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module RSpec::Rails
|
4
|
+
describe ViewExampleGroup do
|
5
|
+
it { should be_included_in_files_in('./spec/views/') }
|
6
|
+
it { should be_included_in_files_in('.\\spec\\views\\') }
|
7
|
+
|
8
|
+
it "adds :type => :view to the metadata" do
|
9
|
+
group = RSpec::Core::ExampleGroup.describe do
|
10
|
+
include ViewExampleGroup
|
11
|
+
end
|
12
|
+
group.metadata[:type].should eq(:view)
|
13
|
+
end
|
14
|
+
|
15
|
+
describe 'automatic inclusion of helpers' do
|
16
|
+
module ::ThingsHelper; end
|
17
|
+
module ::Namespaced; module ThingsHelper; end; end
|
18
|
+
|
19
|
+
it 'includes the helper with the same name' do
|
20
|
+
group = RSpec::Core::ExampleGroup.describe 'things/show.html.erb'
|
21
|
+
group.should_receive(:helper).with(ThingsHelper)
|
22
|
+
group.class_eval do
|
23
|
+
include ViewExampleGroup
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
it 'includes the namespaced helper with the same name' do
|
28
|
+
group = RSpec::Core::ExampleGroup.describe 'namespaced/things/show.html.erb'
|
29
|
+
group.should_receive(:helper).with(Namespaced::ThingsHelper)
|
30
|
+
group.class_eval do
|
31
|
+
include ViewExampleGroup
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
it 'operates normally when no helper with the same name exists' do
|
36
|
+
raise 'unexpected constant found' if Object.const_defined?('ClocksHelper')
|
37
|
+
lambda {
|
38
|
+
RSpec::Core::ExampleGroup.describe 'clocks/show.html.erb' do
|
39
|
+
include ViewExampleGroup
|
40
|
+
end
|
41
|
+
}.should_not raise_error
|
42
|
+
end
|
43
|
+
|
44
|
+
context 'application helper exists' do
|
45
|
+
before do
|
46
|
+
if !Object.const_defined? 'ApplicationHelper'
|
47
|
+
module ::ApplicationHelper; end
|
48
|
+
@application_helper_defined = true
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
after do
|
53
|
+
if @application_helper_defined
|
54
|
+
Object.__send__ :remove_const, 'ApplicationHelper'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
it 'includes the application helper' do
|
59
|
+
group = RSpec::Core::Example.describe 'bars/new.html.erb'
|
60
|
+
group.should_receive(:helper).with(ApplicationHelper)
|
61
|
+
group.class_eval do
|
62
|
+
include ViewExampleGroup
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
|
67
|
+
context 'no application helper exists' do
|
68
|
+
before do
|
69
|
+
if Object.const_defined? 'ApplicationHelper'
|
70
|
+
@application_helper = ApplicationHelper
|
71
|
+
Object.__send__ :remove_const, 'ApplicationHelper'
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
after do
|
76
|
+
if @application_helper
|
77
|
+
ApplicationHelper = @application_helper
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
it 'operates normally' do
|
82
|
+
lambda {
|
83
|
+
RSpec::Core::ExampleGroup.describe 'foos/edit.html.erb' do
|
84
|
+
include ViewExampleGroup
|
85
|
+
end
|
86
|
+
}.should_not raise_error
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
describe "#render" do
|
92
|
+
let(:view_spec) do
|
93
|
+
Class.new do
|
94
|
+
module Local
|
95
|
+
def received
|
96
|
+
@received ||= []
|
97
|
+
end
|
98
|
+
def render(options={}, local_assigns={}, &block)
|
99
|
+
received << [options, local_assigns, block]
|
100
|
+
end
|
101
|
+
def _assigns
|
102
|
+
{}
|
103
|
+
end
|
104
|
+
end
|
105
|
+
include Local
|
106
|
+
include ViewExampleGroup::ExampleMethods
|
107
|
+
end.new
|
108
|
+
end
|
109
|
+
|
110
|
+
context "given no input" do
|
111
|
+
it "sends render(:template => (described file)) to the view" do
|
112
|
+
view_spec.stub(:_default_file_to_render) { "widgets/new" }
|
113
|
+
view_spec.render
|
114
|
+
view_spec.received.first.should == [{:template => "widgets/new"},{}, nil]
|
115
|
+
end
|
116
|
+
|
117
|
+
it "converts the filename components into render options" do
|
118
|
+
view_spec.stub(:_default_file_to_render) { "widgets/new.en.html.erb" }
|
119
|
+
view_spec.render
|
120
|
+
|
121
|
+
if ::Rails::VERSION::STRING >= '3.2'
|
122
|
+
view_spec.received.first.should == [{:template => "widgets/new", :locales=>['en'], :formats=>['html'], :handlers=>['erb']}, {}, nil]
|
123
|
+
else
|
124
|
+
view_spec.received.first.should == [{:template => "widgets/new.en.html.erb"}, {}, nil]
|
125
|
+
end
|
126
|
+
end
|
127
|
+
end
|
128
|
+
|
129
|
+
context "given a string" do
|
130
|
+
it "sends string as the first arg to render" do
|
131
|
+
view_spec.render('arbitrary/path')
|
132
|
+
view_spec.received.first.should == ["arbitrary/path", {}, nil]
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
136
|
+
context "given a hash" do
|
137
|
+
it "sends the hash as the first arg to render" do
|
138
|
+
view_spec.render(:foo => 'bar')
|
139
|
+
view_spec.received.first.should == [{:foo => "bar"}, {}, nil]
|
140
|
+
end
|
141
|
+
end
|
142
|
+
end
|
143
|
+
|
144
|
+
describe '#params' do
|
145
|
+
let(:view_spec) do
|
146
|
+
Class.new do
|
147
|
+
include ViewExampleGroup::ExampleMethods
|
148
|
+
def controller
|
149
|
+
@controller ||= Object.new
|
150
|
+
end
|
151
|
+
end.new
|
152
|
+
end
|
153
|
+
|
154
|
+
it 'delegates to the controller' do
|
155
|
+
view_spec.controller.should_receive(:params).and_return({})
|
156
|
+
view_spec.params[:foo] = 1
|
157
|
+
end
|
158
|
+
end
|
159
|
+
|
160
|
+
describe "#_controller_path" do
|
161
|
+
let(:view_spec) do
|
162
|
+
Class.new do
|
163
|
+
include ViewExampleGroup::ExampleMethods
|
164
|
+
end.new
|
165
|
+
end
|
166
|
+
context "with a common _default_file_to_render" do
|
167
|
+
it "it returns the directory" do
|
168
|
+
view_spec.stub(:_default_file_to_render).
|
169
|
+
and_return("things/new.html.erb")
|
170
|
+
view_spec.__send__(:_controller_path).
|
171
|
+
should == "things"
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
context "with a nested _default_file_to_render" do
|
176
|
+
it "it returns the directory path" do
|
177
|
+
view_spec.stub(:_default_file_to_render).
|
178
|
+
and_return("admin/things/new.html.erb")
|
179
|
+
view_spec.__send__(:_controller_path).
|
180
|
+
should == "admin/things"
|
181
|
+
end
|
182
|
+
end
|
183
|
+
end
|
184
|
+
|
185
|
+
describe "#view" do
|
186
|
+
let(:view_spec) do
|
187
|
+
Class.new do
|
188
|
+
include ViewExampleGroup::ExampleMethods
|
189
|
+
end.new
|
190
|
+
end
|
191
|
+
|
192
|
+
it "delegates to _view" do
|
193
|
+
view = double("view")
|
194
|
+
view_spec.stub(:_view) { view }
|
195
|
+
view_spec.view.should == view
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
describe "#template" do
|
200
|
+
let(:view_spec) do
|
201
|
+
Class.new do
|
202
|
+
include ViewExampleGroup::ExampleMethods
|
203
|
+
def _view; end
|
204
|
+
end.new
|
205
|
+
end
|
206
|
+
|
207
|
+
before { RSpec.stub(:deprecate) }
|
208
|
+
|
209
|
+
it "is deprecated" do
|
210
|
+
RSpec.should_receive(:deprecate)
|
211
|
+
view_spec.template
|
212
|
+
end
|
213
|
+
|
214
|
+
it "delegates to #view" do
|
215
|
+
view_spec.should_receive(:view)
|
216
|
+
view_spec.template
|
217
|
+
end
|
218
|
+
end
|
219
|
+
end
|
220
|
+
end
|