rspec-rails 2.0.0.beta.7 → 2.0.0.beta.8

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.
@@ -27,7 +27,7 @@ Configure:
27
27
 
28
28
  Add this line to the Gemfile:
29
29
 
30
- gem "rspec-rails", ">= 2.0.0.beta.1"
30
+ gem "rspec-rails", ">= 2.0.0.beta.8"
31
31
 
32
32
  This will expose generators, including rspec:install. Now you can run:
33
33
 
@@ -44,8 +44,8 @@ doesn't work all that well yet.
44
44
  Currently supported:
45
45
 
46
46
  * each example runs in its own transaction
47
- * not yet configurable
48
- * i.e. no way to turn this off
47
+ * configurable in Rspec.configure
48
+ * see generated spec/spec_helper.rb
49
49
  * model specs in spec/models
50
50
  * controller specs in spec/controllers
51
51
  * no view isolation yet
@@ -71,14 +71,26 @@ Currently supported:
71
71
 
72
72
  ## Controller Specs
73
73
 
74
- Controller specs live in spec/controllers, and include
75
- behavior from ActionDispatch::Integration::Runner. The
76
- format for a request is:
74
+ Controller specs live in spec/controllers, and mix in
75
+ ActionController::TestCase::Behavior. See the documentation
76
+ for ActionController::TestCase to see what facilities are
77
+ available from Rails.
77
78
 
78
- # get action, params, headers
79
- get :show, {:id => '37'}, {'HTTP_ACCEPT' => Mime::JS}
79
+ You can use RSpec expectations/matchers or Test::Unit assertions.
80
80
 
81
- This works for `get`, `post`, `put`, `delete`, `head`.
81
+ In addition to what Rails offers, controller specs provide all
82
+ of rspec-core's matchers and the rspec-rails' specific matchers
83
+ as well.
84
+
85
+ ## Matchers
86
+
87
+ ### render_template
88
+ Delegates to Rails' assert_template:
89
+
90
+ response.should render_template("new")
91
+
92
+ ### redirect_to
93
+ Delegates to assert_redirect
94
+
95
+ response.should redirect_to(widgets_path)
82
96
 
83
- After a request is made, you set expectations on the `request` and `response`
84
- objects.
data/VERSION CHANGED
@@ -1 +1 @@
1
- 2.0.0.beta.7
1
+ 2.0.0.beta.8
@@ -0,0 +1,53 @@
1
+ Feature: view spec
2
+
3
+ View specs live in spec/views and render view templates in isolation.
4
+
5
+ Scenario: passing spec
6
+ Given a file named "spec/views/widgets/index.html.erb_spec.rb" with:
7
+ """
8
+ require "spec_helper"
9
+
10
+ describe "widgets/index.html.erb" do
11
+ it "displays all the widgets" do
12
+ assign(:widgets, [
13
+ stub_model(Widget, :name => "slicer"),
14
+ stub_model(Widget, :name => "dicer")
15
+ ])
16
+
17
+ render
18
+
19
+ response.should contain("slicer")
20
+ response.should contain("dicer")
21
+ end
22
+ end
23
+ """
24
+ When I run "rspec spec/views"
25
+ Then I should see "1 example, 0 failures"
26
+
27
+ Scenario: passing spec with before and nesting
28
+ Given a file named "spec/views/widgets/index.html.erb_spec.rb" with:
29
+ """
30
+ require "spec_helper"
31
+
32
+ describe "widgets/index.html.erb" do
33
+
34
+ context "with 2 widgets" do
35
+ before(:each) do
36
+ assign(:widgets, [
37
+ stub_model(Widget, :name => "slicer"),
38
+ stub_model(Widget, :name => "dicer")
39
+ ])
40
+ end
41
+
42
+ it "displays both widgets" do
43
+ render
44
+
45
+ response.should contain("slicer")
46
+ response.should contain("dicer")
47
+ end
48
+ end
49
+ end
50
+ """
51
+ When I run "rspec spec/views"
52
+ Then I should see "1 example, 0 failures"
53
+
@@ -28,7 +28,7 @@ end
28
28
 
29
29
  Rake.application.instance_variable_get('@tasks').delete('default')
30
30
 
31
- spec_prereq = File.exist?(File.join(Rails.root, 'config', 'database.yml')) ? "db:test:prepare" : :noop
31
+ spec_prereq = Rails.root.join('config', 'database.yml').exist? ? "db:test:prepare" : :noop
32
32
  task :noop do
33
33
  end
34
34
 
@@ -1,7 +1,7 @@
1
1
  # This file is copied to ~/spec when you run 'ruby script/generate rspec'
2
2
  # from the project root directory.
3
3
  ENV["RAILS_ENV"] ||= 'test'
4
- require File.dirname(__FILE__) + "/../config/environment" unless defined?(RAILS_ROOT)
4
+ require File.dirname(__FILE__) + "/../config/environment" unless defined?(Rails)
5
5
  require 'rspec/rails'
6
6
 
7
7
  # Requires supporting files with custom matchers and macros, etc,
@@ -20,5 +20,5 @@ Rspec.configure do |config|
20
20
 
21
21
  # If you'd prefer not to run each of your examples within a transaction,
22
22
  # uncomment the following line.
23
- # config.use_transactional_examples false
23
+ # config.use_transactional_examples = false
24
24
  end
@@ -66,7 +66,7 @@ describe <%= controller_class_name %>Controller do
66
66
  it "re-renders the 'new' template" do
67
67
  <%= stub! orm_class.build(class_name) %> { <%= mock_file_name(:save => false) %> }
68
68
  post :create, :<%= file_name %> => {}
69
- response.should render_template(:new)
69
+ response.should render_template("new")
70
70
  end
71
71
  end
72
72
 
@@ -104,7 +104,7 @@ describe <%= controller_class_name %>Controller do
104
104
  it "re-renders the 'edit' template" do
105
105
  <%= stub! orm_class.find(class_name) %> { <%= mock_file_name(:update_attributes => false) %> }
106
106
  put :update, :id => "1"
107
- response.should render_template(:edit)
107
+ response.should render_template("edit")
108
108
  end
109
109
  end
110
110
 
@@ -1,3 +1,5 @@
1
+ require 'rspec/rails/monkey'
2
+ require 'rspec/rails/adapters'
1
3
  require 'rspec/rails/transactional_database_support'
2
4
  require 'rspec/rails/matchers'
3
5
  require 'rspec/rails/example'
@@ -0,0 +1,28 @@
1
+ require 'active_support/concern'
2
+ require 'test/unit/assertions'
3
+
4
+ module Rspec
5
+ module Rails
6
+ module SetupAndTeardownAdapter
7
+ def setup(*methods)
8
+ methods.each {|method| before { send method } }
9
+ end
10
+
11
+ def teardown(*methods)
12
+ methods.each {|method| after { send method } }
13
+ end
14
+ end
15
+
16
+ module TestUnitAssertionAdapter
17
+ extend ActiveSupport::Concern
18
+
19
+ included do
20
+ include Test::Unit::Assertions
21
+
22
+ before do
23
+ @_result = Struct.new(:add_assertion).new
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -1,53 +1,32 @@
1
- require 'active_support/core_ext/class/attribute_accessors'
2
1
  require 'action_controller'
3
- require 'action_dispatch'
4
2
  require 'webrat'
5
3
 
6
- # Preliminary documentation (more to come ....):
7
- #
8
- # allow_forgery_protection is set to false
9
- # - you can set it to true in a before(:each) block
10
- # if you have a specific example that needs it, but
11
- # be sure to restore it to false (or supply tokens
12
- # to all of your example requests)
13
-
14
4
  module ControllerExampleGroupBehaviour
15
- include ActionDispatch::Assertions
16
- include ActionDispatch::Integration::Runner
17
- include Webrat::Matchers
18
- include Webrat::Methods
19
- include Rspec::Matchers
20
-
21
- def self.setup(*args); end
22
- def self.teardown(*args); end
5
+ extend ActiveSupport::Concern
23
6
 
24
- include ActionController::TemplateAssertions
25
-
26
- def self.included(mod)
27
- mod.before do
28
- @_result = Struct.new(:add_assertion).new
29
- ActionController::Base.allow_forgery_protection = false
7
+ module ControllerClassReader
8
+ def controller_class
9
+ describes
30
10
  end
31
11
  end
32
12
 
33
- def app
34
- described_class.action(@_action).tap do |endpoint|
35
- def endpoint.routes
36
- Rails.application.routes
37
- end
13
+ included do
14
+ extend Rspec::Rails::SetupAndTeardownAdapter
15
+ include Rspec::Rails::TestUnitAssertionAdapter
16
+ include ActionController::TestCase::Behavior
17
+ extend ControllerClassReader
18
+ include Webrat::Matchers
19
+ include Webrat::Methods
20
+ include Rspec::Matchers
21
+ before do
22
+ @routes = ::Rails.application.routes
23
+ ActionController::Base.allow_forgery_protection = false
38
24
  end
39
25
  end
40
26
 
41
- %w[get post put delete head].map do |method|
42
- eval <<-CODE
43
- def #{method}(*args)
44
- @_action = args.shift
45
- super '/', *args
46
- end
47
- CODE
48
- end
49
-
50
27
  Rspec.configure do |c|
51
- c.include self, :example_group => { :file_path => /\bspec\/controllers\// }
28
+ c.include self, :example_group => {
29
+ :describes => lambda {|described| described < ActionController::Base }
30
+ }
52
31
  end
53
32
  end
@@ -2,15 +2,17 @@ require 'action_dispatch'
2
2
  require 'webrat'
3
3
 
4
4
  module RequestExampleGroupBehaviour
5
- include ActionDispatch::Assertions
5
+ extend ActiveSupport::Concern
6
6
  include ActionDispatch::Integration::Runner
7
- include Webrat::Matchers
8
- include Webrat::Methods
9
- include Rspec::Matchers
10
7
 
11
- def self.included(mod)
12
- mod.before do
13
- @_result = Struct.new(:add_assertion).new
8
+ included do
9
+ include Rspec::Rails::TestUnitAssertionAdapter
10
+ include ActionDispatch::Assertions
11
+ include Webrat::Matchers
12
+ include Webrat::Methods
13
+ include Rspec::Matchers
14
+
15
+ before do
14
16
  @router = ::Rails.application.routes
15
17
  end
16
18
  end
@@ -19,14 +21,14 @@ module RequestExampleGroupBehaviour
19
21
  ::Rails.application
20
22
  end
21
23
 
22
- Webrat.configure do |config|
23
- config.mode = :rack
24
- end
25
-
26
24
  def last_response
27
25
  response
28
26
  end
29
27
 
28
+ Webrat.configure do |config|
29
+ config.mode = :rack
30
+ end
31
+
30
32
  Rspec.configure do |c|
31
33
  c.include self, :example_group => { :file_path => /\bspec\/requests\// }
32
34
  end
@@ -41,7 +41,7 @@ module ViewExampleGroupBehaviour
41
41
  end
42
42
 
43
43
  def file_to_render
44
- running_example.example_group.description
44
+ running_example.example_group.top_level_description
45
45
  end
46
46
 
47
47
  def controller_path
@@ -13,7 +13,7 @@ end
13
13
 
14
14
  begin
15
15
  require "active_record"
16
- rescue
16
+ rescue LoadError
17
17
 
18
18
  end
19
19
 
@@ -25,6 +25,7 @@ end
25
25
 
26
26
  Rspec::Matchers.define :render_template do |options, message|
27
27
  match_unless_raises Test::Unit::AssertionFailedError do |_|
28
+ options = options.to_s if Symbol === options
28
29
  assert_template options, message
29
30
  end
30
31
  end
@@ -4,29 +4,42 @@ module Rspec
4
4
  class IllegalDataAccessException < StandardError; end
5
5
 
6
6
  module Mocks
7
+
8
+ module InstanceMethods
9
+ def valid?
10
+ true
11
+ end
12
+
13
+ def as_new_record
14
+ self.stub(:id) { nil }
15
+ self
16
+ end
17
+
18
+ def new_record?
19
+ !persisted?
20
+ end
21
+
22
+ def persisted?
23
+ !!id
24
+ end
25
+ end
7
26
 
8
27
  # Creates a mock object instance for a +model_class+ with common
9
28
  # methods stubbed out. Additional methods may be easily stubbed (via
10
29
  # add_stubs) if +stubs+ is passed.
11
30
  def mock_model(model_class, options_and_stubs = {})
12
- id = options_and_stubs[:id] || next_id
31
+ id = options_and_stubs.has_key?(:id) ? options_and_stubs[:id] : next_id
13
32
  options_and_stubs = options_and_stubs.reverse_merge({
14
33
  :id => id,
15
- :to_param => id.to_s,
16
- :new_record? => false,
17
34
  :destroyed? => false,
18
- :marked_for_destruction? => false,
19
- :errors => stub("errors", :count => 0, :any? => false)
35
+ :marked_for_destruction? => false
20
36
  })
21
37
  derived_name = "#{model_class.name}_#{id}"
22
38
  m = mock(derived_name, options_and_stubs)
39
+ m.extend InstanceMethods
40
+ m.extend ActiveModel::Conversion
41
+ m.stub(:errors) { ActiveModel::Errors.new(m) }
23
42
  m.__send__(:__mock_proxy).instance_eval(<<-CODE, __FILE__, __LINE__)
24
- def @object.as_new_record
25
- self.stub(:id) { nil }
26
- self.stub(:to_param) { nil }
27
- self.stub(:new_record?) { true }
28
- self
29
- end
30
43
  def @object.is_a?(other)
31
44
  #{model_class}.ancestors.include?(other)
32
45
  end
@@ -0,0 +1,2 @@
1
+ require 'rspec/rails/monkey/action_controller/test_case'
2
+ require 'rspec/rails/monkey/active_support/notifications/fanout'
@@ -0,0 +1,199 @@
1
+ require 'action_controller'
2
+ require 'action_controller/test_case'
3
+
4
+ module ActionController
5
+ # This has been merged to rails HEAD after the 3.0.0.beta.3 release (see
6
+ # https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4433).
7
+ # Once 3.0.0.rc.1 comes out, we can remove it.
8
+ module TemplateAssertions
9
+ def teardown_subscriptions
10
+ ActiveSupport::Notifications.unsubscribe("action_view.render_template")
11
+ ActiveSupport::Notifications.unsubscribe("action_view.render_template!")
12
+ end
13
+ end
14
+
15
+ # The remainder of this file has yet to be merged to rails HEAD and is
16
+ # therefore merely speculative and hopeful.
17
+ class TestCase < ActiveSupport::TestCase
18
+ module Behavior
19
+ extend ActiveSupport::Concern
20
+ include ActionDispatch::TestProcess
21
+
22
+ attr_reader :response, :request
23
+
24
+ module ClassMethods
25
+
26
+ # Sets the controller class name. Useful if the name can't be inferred from test class.
27
+ # Expects +controller_class+ as a constant. Example: <tt>tests WidgetController</tt>.
28
+ def tests(controller_class)
29
+ self.controller_class = controller_class
30
+ end
31
+
32
+ def controller_class=(new_class)
33
+ prepare_controller_class(new_class) if new_class
34
+ write_inheritable_attribute(:controller_class, new_class)
35
+ end
36
+
37
+ def controller_class
38
+ if current_controller_class = read_inheritable_attribute(:controller_class)
39
+ current_controller_class
40
+ else
41
+ self.controller_class = determine_default_controller_class(name)
42
+ end
43
+ end
44
+
45
+ def determine_default_controller_class(name)
46
+ name.sub(/Test$/, '').constantize
47
+ rescue NameError
48
+ nil
49
+ end
50
+
51
+ def prepare_controller_class(new_class)
52
+ new_class.send :include, ActionController::TestCase::RaiseActionExceptions
53
+ end
54
+
55
+ end
56
+
57
+ # Executes a request simulating GET HTTP method and set/volley the response
58
+ def get(action, parameters = nil, session = nil, flash = nil)
59
+ process(action, parameters, session, flash, "GET")
60
+ end
61
+
62
+ # Executes a request simulating POST HTTP method and set/volley the response
63
+ def post(action, parameters = nil, session = nil, flash = nil)
64
+ process(action, parameters, session, flash, "POST")
65
+ end
66
+
67
+ # Executes a request simulating PUT HTTP method and set/volley the response
68
+ def put(action, parameters = nil, session = nil, flash = nil)
69
+ process(action, parameters, session, flash, "PUT")
70
+ end
71
+
72
+ # Executes a request simulating DELETE HTTP method and set/volley the response
73
+ def delete(action, parameters = nil, session = nil, flash = nil)
74
+ process(action, parameters, session, flash, "DELETE")
75
+ end
76
+
77
+ # Executes a request simulating HEAD HTTP method and set/volley the response
78
+ def head(action, parameters = nil, session = nil, flash = nil)
79
+ process(action, parameters, session, flash, "HEAD")
80
+ end
81
+
82
+ def xml_http_request(request_method, action, parameters = nil, session = nil, flash = nil)
83
+ @request.env['HTTP_X_REQUESTED_WITH'] = 'XMLHttpRequest'
84
+ @request.env['HTTP_ACCEPT'] ||= [Mime::JS, Mime::HTML, Mime::XML, 'text/xml', Mime::ALL].join(', ')
85
+ returning __send__(request_method, action, parameters, session, flash) do
86
+ @request.env.delete 'HTTP_X_REQUESTED_WITH'
87
+ @request.env.delete 'HTTP_ACCEPT'
88
+ end
89
+ end
90
+ alias xhr :xml_http_request
91
+
92
+ def process(action, parameters = nil, session = nil, flash = nil, http_method = 'GET')
93
+ # Sanity check for required instance variables so we can give an
94
+ # understandable error message.
95
+ %w(@routes @controller @request @response).each do |iv_name|
96
+ if !(instance_variable_names.include?(iv_name) || instance_variable_names.include?(iv_name.to_sym)) || instance_variable_get(iv_name).nil?
97
+ raise "#{iv_name} is nil: make sure you set it in your test's setup method."
98
+ end
99
+ end
100
+
101
+ @request.recycle!
102
+ @response.recycle!
103
+ @controller.response_body = nil
104
+ @controller.formats = nil
105
+ @controller.params = nil
106
+
107
+ @html_document = nil
108
+ @request.env['REQUEST_METHOD'] = http_method
109
+
110
+ parameters ||= {}
111
+ @request.assign_parameters(@routes, @controller.class.name.underscore.sub(/_controller$/, ''), action.to_s, parameters)
112
+
113
+ @request.session = ActionController::TestSession.new(session) unless session.nil?
114
+ @request.session["flash"] = @request.flash.update(flash || {})
115
+ @request.session["flash"].sweep
116
+
117
+ @controller.request = @request
118
+ @controller.params.merge!(parameters)
119
+ build_request_uri(action, parameters)
120
+ Base.class_eval { include Testing }
121
+ @controller.process_with_new_base_test(@request, @response)
122
+ @request.session.delete('flash') if @request.session['flash'].blank?
123
+ @response
124
+ end
125
+
126
+ def setup_controller_request_and_response
127
+ @request = TestRequest.new
128
+ @response = TestResponse.new
129
+
130
+ if klass = self.class.controller_class
131
+ @controller ||= klass.new rescue nil
132
+ end
133
+
134
+ @request.env.delete('PATH_INFO')
135
+
136
+ if @controller
137
+ @controller.request = @request
138
+ @controller.params = {}
139
+ end
140
+ end
141
+
142
+ # Cause the action to be rescued according to the regular rules for rescue_action when the visitor is not local
143
+ def rescue_action_in_public!
144
+ @request.remote_addr = '208.77.188.166' # example.com
145
+ end
146
+
147
+ included do
148
+ include ActionController::TemplateAssertions
149
+ include ActionDispatch::Assertions
150
+ setup :setup_controller_request_and_response
151
+ end
152
+
153
+ private
154
+
155
+ def build_request_uri(action, parameters)
156
+ unless @request.env["PATH_INFO"]
157
+ options = @controller.__send__(:url_options).merge(parameters)
158
+ options.update(
159
+ :only_path => true,
160
+ :action => action,
161
+ :relative_url_root => nil,
162
+ :_path_segments => @request.symbolized_path_parameters)
163
+
164
+ url, query_string = @routes.url_for(options).split("?", 2)
165
+
166
+ @request.env["SCRIPT_NAME"] = @controller.config.relative_url_root
167
+ @request.env["PATH_INFO"] = url
168
+ @request.env["QUERY_STRING"] = query_string || ""
169
+ end
170
+ end
171
+ end
172
+
173
+ # When the request.remote_addr remains the default for testing, which is 0.0.0.0, the exception is simply raised inline
174
+ # (bystepping the regular exception handling from rescue_action). If the request.remote_addr is anything else, the regular
175
+ # rescue_action process takes place. This means you can test your rescue_action code by setting remote_addr to something else
176
+ # than 0.0.0.0.
177
+ #
178
+ # The exception is stored in the exception accessor for further inspection.
179
+ module RaiseActionExceptions
180
+ def self.included(base)
181
+ base.class_eval do
182
+ attr_accessor :exception
183
+ protected :exception, :exception=
184
+ end
185
+ end
186
+
187
+ protected
188
+ def rescue_action_without_handler(e)
189
+ self.exception = e
190
+
191
+ if request.remote_addr == "0.0.0.0"
192
+ raise(e)
193
+ else
194
+ super(e)
195
+ end
196
+ end
197
+ end
198
+ end
199
+ end
@@ -0,0 +1,20 @@
1
+ require 'active_support/notifications/fanout'
2
+
3
+ # This has been merged to rails HEAD after the 3.0.0.beta.3 release (see
4
+ # https://rails.lighthouseapp.com/projects/8994-ruby-on-rails/tickets/4433).
5
+ # Once 3.0.0.rc.1 comes out, we can remove it.
6
+ class ActiveSupport::Notifications::Fanout
7
+ def unsubscribe(subscriber_or_name)
8
+ @listeners_for.clear
9
+ @subscribers.reject! do |s|
10
+ s.instance_eval do
11
+ case subscriber_or_name
12
+ when String
13
+ @pattern && @pattern =~ subscriber_or_name
14
+ when self
15
+ true
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{rspec-rails}
8
- s.version = "2.0.0.beta.7"
8
+ s.version = "2.0.0.beta.8"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new("> 1.3.1") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["David Chelimsky", "Chad Humphries"]
12
- s.date = %q{2010-04-17}
12
+ s.date = %q{2010-04-27}
13
13
  s.description = %q{Rspec-2 for Rails-3}
14
14
  s.email = %q{dchelimsky@gmail.com;chad.humphries@gmail.com}
15
15
  s.extra_rdoc_files = [
@@ -26,6 +26,7 @@ Gem::Specification.new do |s|
26
26
  "features/model_specs/transactional_examples.feature",
27
27
  "features/step_definitions/model_steps.rb",
28
28
  "features/support/env.rb",
29
+ "features/view_specs/view_spec.feature",
29
30
  "lib/autotest/rails_rspec2.rb",
30
31
  "lib/generators/rspec.rb",
31
32
  "lib/generators/rspec/controller/controller_generator.rb",
@@ -59,6 +60,7 @@ Gem::Specification.new do |s|
59
60
  "lib/generators/rspec/view/view_generator.rb",
60
61
  "lib/rspec-rails.rb",
61
62
  "lib/rspec/rails.rb",
63
+ "lib/rspec/rails/adapters.rb",
62
64
  "lib/rspec/rails/example.rb",
63
65
  "lib/rspec/rails/example/controller_example_group.rb",
64
66
  "lib/rspec/rails/example/mailer_example_group.rb",
@@ -66,6 +68,9 @@ Gem::Specification.new do |s|
66
68
  "lib/rspec/rails/example/view_example_group.rb",
67
69
  "lib/rspec/rails/matchers.rb",
68
70
  "lib/rspec/rails/mocks.rb",
71
+ "lib/rspec/rails/monkey.rb",
72
+ "lib/rspec/rails/monkey/action_controller/test_case.rb",
73
+ "lib/rspec/rails/monkey/active_support/notifications/fanout.rb",
69
74
  "lib/rspec/rails/transactional_database_support.rb",
70
75
  "lib/rspec/rails/version.rb",
71
76
  "rspec-rails.gemspec",
@@ -84,7 +89,7 @@ Gem::Specification.new do |s|
84
89
  s.homepage = %q{http://github.com/rspec/rspec-rails}
85
90
  s.post_install_message = %q{**************************************************
86
91
 
87
- Thank you for installing rspec-rails-2.0.0.beta.7!
92
+ Thank you for installing rspec-rails-2.0.0.beta.8!
88
93
 
89
94
  This version of rspec-rails only works with
90
95
  versions of rails >= 3.0.0.pre.
@@ -99,7 +104,7 @@ Gem::Specification.new do |s|
99
104
  s.require_paths = ["lib"]
100
105
  s.rubyforge_project = %q{rspec}
101
106
  s.rubygems_version = %q{1.3.6}
102
- s.summary = %q{rspec-rails-2.0.0.beta.7}
107
+ s.summary = %q{rspec-rails-2.0.0.beta.8}
103
108
  s.test_files = [
104
109
  "spec/rspec/rails/matchers/be_a_new_spec.rb",
105
110
  "spec/rspec/rails/matchers/redirect_to_spec.rb",
@@ -116,14 +121,14 @@ Gem::Specification.new do |s|
116
121
  s.specification_version = 3
117
122
 
118
123
  if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
119
- s.add_runtime_dependency(%q<rspec>, ["= 2.0.0.beta.7"])
124
+ s.add_runtime_dependency(%q<rspec>, ["= 2.0.0.beta.8"])
120
125
  s.add_runtime_dependency(%q<webrat>, [">= 0.7.0"])
121
126
  else
122
- s.add_dependency(%q<rspec>, ["= 2.0.0.beta.7"])
127
+ s.add_dependency(%q<rspec>, ["= 2.0.0.beta.8"])
123
128
  s.add_dependency(%q<webrat>, [">= 0.7.0"])
124
129
  end
125
130
  else
126
- s.add_dependency(%q<rspec>, ["= 2.0.0.beta.7"])
131
+ s.add_dependency(%q<rspec>, ["= 2.0.0.beta.8"])
127
132
  s.add_dependency(%q<webrat>, [">= 0.7.0"])
128
133
  end
129
134
  end
@@ -1,8 +1,25 @@
1
1
  require "spec_helper"
2
2
 
3
3
  describe "render_template" do
4
- it "delegates to assert_template" do
5
- self.should_receive(:assert_template).with({:this => "hash"}, "this message")
6
- "response".should render_template({:this => "hash"}, "this message")
4
+ context "given a hash" do
5
+ it "delegates to assert_template" do
6
+ self.should_receive(:assert_template).with({:this => "hash"}, "this message")
7
+ "response".should render_template({:this => "hash"}, "this message")
8
+ end
9
+ end
10
+
11
+ context "given a string" do
12
+ it "delegates to assert_template" do
13
+ self.should_receive(:assert_template).with("this string", "this message")
14
+ "response".should render_template("this string", "this message")
15
+ end
16
+ end
17
+
18
+ context "given a string" do
19
+ it "converts to_s and delegates to assert_template" do
20
+ self.should_receive(:assert_template).with("template_name", "this message")
21
+ "response".should render_template(:template_name, "this message")
22
+ end
7
23
  end
8
24
  end
25
+
@@ -52,6 +52,25 @@ describe "mock_model" do
52
52
  end
53
53
  end
54
54
 
55
+ context "with id nil" do
56
+ it "is not persisted" do
57
+ mock_model(MockableModel, :id => nil).should_not be_persisted
58
+ end
59
+ end
60
+
61
+ describe "valid?" do
62
+ context "default" do
63
+ it "returns true" do
64
+ mock_model(MockableModel).should be_valid
65
+ end
66
+ end
67
+ context "stubbed with false" do
68
+ it "returns false" do
69
+ mock_model(MockableModel, :valid? => false).should_not be_valid
70
+ end
71
+ end
72
+ end
73
+
55
74
  describe "as association", :type => :view do
56
75
  before(:each) do
57
76
  @real = AssociatedModel.create!
@@ -68,20 +87,7 @@ describe "mock_model" do
68
87
  end
69
88
  end
70
89
 
71
- describe "with :null_object => true", :type => :view do
72
- before(:each) do
73
- @model = mock_model(MockableModel, :null_object => true, :mocked_method => "mocked")
74
- end
75
-
76
- it "should be able to mock methods" do
77
- @model.mocked_method.should == "mocked"
78
- end
79
- it "should return itself to unmocked methods" do
80
- @model.unmocked_method.should equal(@model)
81
- end
82
- end
83
-
84
- describe "#as_null_object", :type => :view do
90
+ describe "#as_null_object" do
85
91
  before(:each) do
86
92
  @model = mock_model(MockableModel, :mocked_method => "mocked").as_null_object
87
93
  end
@@ -108,7 +114,26 @@ describe "mock_model" do
108
114
  mock_model(MockableModel).as_new_record.to_param.should be(nil)
109
115
  end
110
116
  end
117
+
118
+ describe "ActiveModel Lint tests" do
119
+ require 'test/unit/assertions'
120
+ require 'active_model/lint'
121
+ include Test::Unit::Assertions
122
+ include ActiveModel::Lint::Tests
123
+
124
+ ActiveModel::Lint::Tests.public_instance_methods.grep(/^test/).each do |m|
125
+ example m.gsub('_',' ') do
126
+ send m
127
+ end
128
+ end
129
+
130
+ def model
131
+ mock_model(MockableModel, :id => nil)
132
+ end
133
+
134
+ end
111
135
  end
112
136
 
113
137
 
114
138
 
139
+
metadata CHANGED
@@ -7,8 +7,8 @@ version: !ruby/object:Gem::Version
7
7
  - 0
8
8
  - 0
9
9
  - beta
10
- - 7
11
- version: 2.0.0.beta.7
10
+ - 8
11
+ version: 2.0.0.beta.8
12
12
  platform: ruby
13
13
  authors:
14
14
  - David Chelimsky
@@ -17,7 +17,7 @@ autorequire:
17
17
  bindir: bin
18
18
  cert_chain: []
19
19
 
20
- date: 2010-04-17 00:00:00 -05:00
20
+ date: 2010-04-27 00:00:00 -05:00
21
21
  default_executable:
22
22
  dependencies:
23
23
  - !ruby/object:Gem::Dependency
@@ -32,8 +32,8 @@ dependencies:
32
32
  - 0
33
33
  - 0
34
34
  - beta
35
- - 7
36
- version: 2.0.0.beta.7
35
+ - 8
36
+ version: 2.0.0.beta.8
37
37
  type: :runtime
38
38
  version_requirements: *id001
39
39
  - !ruby/object:Gem::Dependency
@@ -69,6 +69,7 @@ files:
69
69
  - features/model_specs/transactional_examples.feature
70
70
  - features/step_definitions/model_steps.rb
71
71
  - features/support/env.rb
72
+ - features/view_specs/view_spec.feature
72
73
  - lib/autotest/rails_rspec2.rb
73
74
  - lib/generators/rspec.rb
74
75
  - lib/generators/rspec/controller/controller_generator.rb
@@ -102,6 +103,7 @@ files:
102
103
  - lib/generators/rspec/view/view_generator.rb
103
104
  - lib/rspec-rails.rb
104
105
  - lib/rspec/rails.rb
106
+ - lib/rspec/rails/adapters.rb
105
107
  - lib/rspec/rails/example.rb
106
108
  - lib/rspec/rails/example/controller_example_group.rb
107
109
  - lib/rspec/rails/example/mailer_example_group.rb
@@ -109,6 +111,9 @@ files:
109
111
  - lib/rspec/rails/example/view_example_group.rb
110
112
  - lib/rspec/rails/matchers.rb
111
113
  - lib/rspec/rails/mocks.rb
114
+ - lib/rspec/rails/monkey.rb
115
+ - lib/rspec/rails/monkey/action_controller/test_case.rb
116
+ - lib/rspec/rails/monkey/active_support/notifications/fanout.rb
112
117
  - lib/rspec/rails/transactional_database_support.rb
113
118
  - lib/rspec/rails/version.rb
114
119
  - rspec-rails.gemspec
@@ -130,7 +135,7 @@ licenses: []
130
135
  post_install_message: |
131
136
  **************************************************
132
137
 
133
- Thank you for installing rspec-rails-2.0.0.beta.7!
138
+ Thank you for installing rspec-rails-2.0.0.beta.8!
134
139
 
135
140
  This version of rspec-rails only works with
136
141
  versions of rails >= 3.0.0.pre.
@@ -167,7 +172,7 @@ rubyforge_project: rspec
167
172
  rubygems_version: 1.3.6
168
173
  signing_key:
169
174
  specification_version: 3
170
- summary: rspec-rails-2.0.0.beta.7
175
+ summary: rspec-rails-2.0.0.beta.8
171
176
  test_files:
172
177
  - spec/rspec/rails/matchers/be_a_new_spec.rb
173
178
  - spec/rspec/rails/matchers/redirect_to_spec.rb