rspec-rails 2.11.4 → 2.12.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/Capybara.md +2 -2
- data/Changelog.md +25 -1
- data/README.md +61 -25
- data/features/controller_specs/anonymous_controller.feature +25 -25
- data/features/controller_specs/bypass_rescue.feature +4 -4
- data/features/controller_specs/controller_spec.feature +4 -4
- data/features/controller_specs/isolation_from_views.feature +13 -13
- data/features/controller_specs/render_views.feature +11 -11
- data/features/feature_specs/feature_spec.feature +34 -0
- data/features/helper_specs/helper_spec.feature +10 -10
- data/features/mailer_specs/url_helpers.feature +7 -7
- data/features/matchers/new_record_matcher.feature +20 -7
- data/features/matchers/redirect_to_matcher.feature +6 -6
- data/features/matchers/relation_match_array.feature +8 -6
- data/features/matchers/render_template_matcher.feature +25 -4
- data/features/mocks/mock_model.feature +21 -21
- data/features/mocks/stub_model.feature +8 -8
- data/features/model_specs/errors_on.feature +25 -7
- data/features/model_specs/transactional_examples.feature +13 -13
- data/features/request_specs/request_spec.feature +8 -8
- data/features/routing_specs/be_routable_matcher.feature +10 -10
- data/features/routing_specs/named_routes.feature +3 -3
- data/features/routing_specs/route_to_matcher.feature +17 -17
- data/features/view_specs/inferred_controller_path.feature +7 -6
- data/features/view_specs/stub_template.feature +5 -5
- data/features/view_specs/view_spec.feature +50 -18
- data/lib/autotest/rails_rspec2.rb +1 -1
- data/lib/generators/rspec.rb +6 -0
- data/lib/generators/rspec/controller/templates/controller_spec.rb +2 -0
- data/lib/generators/rspec/helper/templates/helper_spec.rb +2 -0
- data/lib/generators/rspec/mailer/templates/mailer_spec.rb +2 -0
- data/lib/generators/rspec/model/templates/model_spec.rb +2 -0
- data/lib/generators/rspec/observer/templates/observer_spec.rb +2 -0
- data/lib/generators/rspec/scaffold/scaffold_generator.rb +37 -3
- data/lib/generators/rspec/scaffold/templates/controller_spec.rb +9 -7
- data/lib/generators/rspec/scaffold/templates/routing_spec.rb +2 -0
- data/lib/rspec/rails/example.rb +5 -1
- data/lib/rspec/rails/example/feature_example_group.rb +30 -0
- data/lib/rspec/rails/example/view_example_group.rb +23 -12
- data/lib/rspec/rails/extensions.rb +1 -0
- data/lib/rspec/rails/extensions/active_record/base.rb +5 -3
- data/lib/rspec/rails/extensions/active_record/proxy.rb +17 -0
- data/lib/rspec/rails/matchers/be_new_record.rb +8 -0
- data/lib/rspec/rails/tasks/rspec.rake +1 -2
- data/lib/rspec/rails/vendor/capybara.rb +2 -8
- data/lib/rspec/rails/version.rb +1 -1
- data/spec/autotest/rails_rspec2_spec.rb +4 -4
- data/spec/generators/rspec/model/model_generator_spec.rb +1 -1
- data/spec/generators/rspec/scaffold/scaffold_generator_spec.rb +8 -0
- data/spec/rspec/rails/example/feature_example_group_spec.rb +56 -0
- data/spec/rspec/rails/example/view_example_group_spec.rb +7 -1
- data/spec/rspec/rails/matchers/be_new_record_spec.rb +16 -2
- data/spec/rspec/rails/matchers/has_spec.rb +29 -0
- data/spec/rspec/rails/matchers/relation_match_array_spec.rb +18 -7
- metadata +66 -10
@@ -18,13 +18,14 @@ require 'spec_helper'
|
|
18
18
|
# Message expectations are only used when there is no simpler way to specify
|
19
19
|
# that an instance is receiving a specific message.
|
20
20
|
|
21
|
+
<% module_namespacing do -%>
|
21
22
|
describe <%= controller_class_name %>Controller do
|
22
23
|
|
23
24
|
# This should return the minimal set of attributes required to create a valid
|
24
25
|
# <%= class_name %>. As you add validations to <%= class_name %>, be sure to
|
25
26
|
# update the return value of this method accordingly.
|
26
27
|
def valid_attributes
|
27
|
-
|
28
|
+
<%= formatted_hash(example_valid_attributes) %>
|
28
29
|
end
|
29
30
|
|
30
31
|
# This should return the minimal set of values that should be in the session
|
@@ -91,14 +92,14 @@ describe <%= controller_class_name %>Controller do
|
|
91
92
|
it "assigns a newly created but unsaved <%= ns_file_name %> as @<%= ns_file_name %>" do
|
92
93
|
# Trigger the behavior that occurs when invalid params are submitted
|
93
94
|
<%= class_name %>.any_instance.stub(:save).and_return(false)
|
94
|
-
post :create, {:<%= ns_file_name %> =>
|
95
|
+
post :create, {:<%= ns_file_name %> => <%= formatted_hash(example_invalid_attributes) %>}, valid_session
|
95
96
|
assigns(:<%= ns_file_name %>).should be_a_new(<%= class_name %>)
|
96
97
|
end
|
97
98
|
|
98
99
|
it "re-renders the 'new' template" do
|
99
100
|
# Trigger the behavior that occurs when invalid params are submitted
|
100
101
|
<%= class_name %>.any_instance.stub(:save).and_return(false)
|
101
|
-
post :create, {:<%= ns_file_name %> =>
|
102
|
+
post :create, {:<%= ns_file_name %> => <%= formatted_hash(example_invalid_attributes) %>}, valid_session
|
102
103
|
response.should render_template("new")
|
103
104
|
end
|
104
105
|
end
|
@@ -112,8 +113,8 @@ describe <%= controller_class_name %>Controller do
|
|
112
113
|
# specifies that the <%= class_name %> created on the previous line
|
113
114
|
# receives the :update_attributes message with whatever params are
|
114
115
|
# submitted in the request.
|
115
|
-
<%= class_name %>.any_instance.should_receive(:update_attributes).with(<%=
|
116
|
-
put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> => <%=
|
116
|
+
<%= class_name %>.any_instance.should_receive(:update_attributes).with(<%= formatted_hash(example_params_for_update) %>)
|
117
|
+
put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> => <%= formatted_hash(example_params_for_update) %>}, valid_session
|
117
118
|
end
|
118
119
|
|
119
120
|
it "assigns the requested <%= ns_file_name %> as @<%= ns_file_name %>" do
|
@@ -134,7 +135,7 @@ describe <%= controller_class_name %>Controller do
|
|
134
135
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
135
136
|
# Trigger the behavior that occurs when invalid params are submitted
|
136
137
|
<%= class_name %>.any_instance.stub(:save).and_return(false)
|
137
|
-
put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> =>
|
138
|
+
put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> => <%= formatted_hash(example_invalid_attributes) %>}, valid_session
|
138
139
|
assigns(:<%= ns_file_name %>).should eq(<%= file_name %>)
|
139
140
|
end
|
140
141
|
|
@@ -142,7 +143,7 @@ describe <%= controller_class_name %>Controller do
|
|
142
143
|
<%= file_name %> = <%= class_name %>.create! valid_attributes
|
143
144
|
# Trigger the behavior that occurs when invalid params are submitted
|
144
145
|
<%= class_name %>.any_instance.stub(:save).and_return(false)
|
145
|
-
put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> =>
|
146
|
+
put :update, {:id => <%= file_name %>.to_param, :<%= ns_file_name %> => <%= formatted_hash(example_invalid_attributes) %>}, valid_session
|
146
147
|
response.should render_template("edit")
|
147
148
|
end
|
148
149
|
end
|
@@ -164,3 +165,4 @@ describe <%= controller_class_name %>Controller do
|
|
164
165
|
end
|
165
166
|
|
166
167
|
end
|
168
|
+
<% end -%>
|
data/lib/rspec/rails/example.rb
CHANGED
@@ -6,6 +6,7 @@ require 'rspec/rails/example/view_example_group'
|
|
6
6
|
require 'rspec/rails/example/mailer_example_group'
|
7
7
|
require 'rspec/rails/example/routing_example_group'
|
8
8
|
require 'rspec/rails/example/model_example_group'
|
9
|
+
require 'rspec/rails/example/feature_example_group'
|
9
10
|
|
10
11
|
RSpec::configure do |c|
|
11
12
|
def c.escaped_path(*parts)
|
@@ -27,7 +28,7 @@ RSpec::configure do |c|
|
|
27
28
|
:file_path => c.escaped_path(%w[spec models])
|
28
29
|
}
|
29
30
|
c.include RSpec::Rails::RequestExampleGroup, :type => :request, :example_group => {
|
30
|
-
:file_path => c.escaped_path(%w[spec (requests|integration)])
|
31
|
+
:file_path => c.escaped_path(%w[spec (requests|integration|api)])
|
31
32
|
}
|
32
33
|
c.include RSpec::Rails::RoutingExampleGroup, :type => :routing, :example_group => {
|
33
34
|
:file_path => c.escaped_path(%w[spec routing])
|
@@ -35,4 +36,7 @@ RSpec::configure do |c|
|
|
35
36
|
c.include RSpec::Rails::ViewExampleGroup, :type => :view, :example_group => {
|
36
37
|
:file_path => c.escaped_path(%w[spec views])
|
37
38
|
}
|
39
|
+
c.include RSpec::Rails::FeatureExampleGroup, :type => :feature, :example_group => {
|
40
|
+
:file_path => c.escaped_path(%w[spec features])
|
41
|
+
}
|
38
42
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module RSpec::Rails
|
2
|
+
module FeatureExampleGroup
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
include RSpec::Rails::RailsExampleGroup
|
5
|
+
|
6
|
+
DEFAULT_HOST = "www.example.com"
|
7
|
+
|
8
|
+
included do
|
9
|
+
metadata[:type] = :feature
|
10
|
+
|
11
|
+
app = ::Rails.application
|
12
|
+
if app.respond_to?(:routes)
|
13
|
+
include app.routes.url_helpers if app.routes.respond_to?(:url_helpers)
|
14
|
+
include app.routes.mounted_helpers if app.routes.respond_to?(:mounted_helpers)
|
15
|
+
|
16
|
+
if respond_to?(:default_url_options)
|
17
|
+
default_url_options[:host] ||= ::RSpec::Rails::FeatureExampleGroup::DEFAULT_HOST
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def visit(*)
|
23
|
+
if defined?(super)
|
24
|
+
super
|
25
|
+
else
|
26
|
+
raise "Capybara not loaded, please add it to your Gemfile:\n\ngem \"capybara\""
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -88,7 +88,15 @@ module RSpec::Rails
|
|
88
88
|
|
89
89
|
# @deprecated Use `rendered` instead.
|
90
90
|
def response
|
91
|
-
|
91
|
+
# `assert_template` expects `response` to implement a #body method
|
92
|
+
# like an `ActionDispatch::Response` does to force the view to render.
|
93
|
+
# For backwards compatibility, we use #response as an alias for
|
94
|
+
# #rendered, but it needs to implement #body to avoid `assert_template`
|
95
|
+
# raising a `NoMethodError`.
|
96
|
+
unless rendered.respond_to?(:body)
|
97
|
+
def rendered.body; self; end;
|
98
|
+
end
|
99
|
+
|
92
100
|
rendered
|
93
101
|
end
|
94
102
|
|
@@ -99,16 +107,20 @@ module RSpec::Rails
|
|
99
107
|
end
|
100
108
|
|
101
109
|
def _default_render_options
|
102
|
-
|
103
|
-
|
104
|
-
|
110
|
+
if ::Rails.version >= "3.2"
|
111
|
+
# pluck the handler, format, and locale out of, eg, posts/index.de.html.haml
|
112
|
+
template, *components = _default_file_to_render.split('.')
|
113
|
+
handler, format, locale = *components.reverse
|
105
114
|
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
115
|
+
render_options = {:template => template}
|
116
|
+
render_options[:handlers] = [handler] if handler
|
117
|
+
render_options[:formats] = [format] if format
|
118
|
+
render_options[:locales] = [locale] if locale
|
110
119
|
|
111
|
-
|
120
|
+
render_options
|
121
|
+
else
|
122
|
+
{:template => _default_file_to_render}
|
123
|
+
end
|
112
124
|
end
|
113
125
|
|
114
126
|
def _path_parts
|
@@ -142,10 +154,9 @@ module RSpec::Rails
|
|
142
154
|
if view.lookup_context.respond_to?(:prefixes)
|
143
155
|
# rails 3.1
|
144
156
|
view.lookup_context.prefixes << _controller_path
|
145
|
-
else
|
146
|
-
# rails 3.0
|
147
|
-
controller.controller_path = _controller_path
|
148
157
|
end
|
158
|
+
|
159
|
+
controller.controller_path = _controller_path
|
149
160
|
controller.request.path_parameters[:controller] = _controller_path
|
150
161
|
controller.request.path_parameters[:action] = _inferred_action unless _inferred_action =~ /^_/
|
151
162
|
end
|
@@ -26,7 +26,8 @@ end
|
|
26
26
|
|
27
27
|
module ::ActiveModel::Validations
|
28
28
|
# Extension to enhance `should have` on AR Model instances. Calls
|
29
|
-
# model.valid? in order to prepare the object's errors object.
|
29
|
+
# model.valid? in order to prepare the object's errors object. Accepts
|
30
|
+
# a :context option to specify the validation context.
|
30
31
|
#
|
31
32
|
# You can also use this to specify the content of the error messages.
|
32
33
|
#
|
@@ -35,10 +36,11 @@ module ::ActiveModel::Validations
|
|
35
36
|
# model.should have(:no).errors_on(:attribute)
|
36
37
|
# model.should have(1).error_on(:attribute)
|
37
38
|
# model.should have(n).errors_on(:attribute)
|
39
|
+
# model.should have(n).errors_on(:attribute, :context => :create)
|
38
40
|
#
|
39
41
|
# model.errors_on(:attribute).should include("can't be blank")
|
40
|
-
def errors_on(attribute)
|
41
|
-
self.valid?
|
42
|
+
def errors_on(attribute, options = {})
|
43
|
+
self.valid?(options[:context])
|
42
44
|
[self.errors[attribute]].flatten.compact
|
43
45
|
end
|
44
46
|
alias :error_on :errors_on
|
@@ -0,0 +1,17 @@
|
|
1
|
+
RSpec.configure do |rspec|
|
2
|
+
# Delay this in order to give users a chance to configure `expect_with`...
|
3
|
+
rspec.before(:suite) do
|
4
|
+
if defined?(RSpec::Matchers) && RSpec::Matchers.configuration.syntax.include?(:should) && defined?(ActiveRecord)
|
5
|
+
# In Rails 3.0, it was AssociationProxy.
|
6
|
+
# In 3.1+, it's CollectionProxy.
|
7
|
+
const_name = [:CollectionProxy, :AssociationProxy].find do |const|
|
8
|
+
ActiveRecord::Associations.const_defined?(const)
|
9
|
+
end
|
10
|
+
|
11
|
+
proxy_class = ActiveRecord::Associations.const_get(const_name)
|
12
|
+
|
13
|
+
RSpec::Matchers.configuration.add_should_and_should_not_to proxy_class
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
@@ -5,6 +5,14 @@ module RSpec::Rails::Matchers
|
|
5
5
|
def matches?(actual)
|
6
6
|
!actual.persisted?
|
7
7
|
end
|
8
|
+
|
9
|
+
def failure_message_for_should
|
10
|
+
"expected #{actual.inspect} to be a new record, but was persisted"
|
11
|
+
end
|
12
|
+
|
13
|
+
def failure_message_for_should_not
|
14
|
+
"expected #{actual.inspect} to be persisted, but was a new record"
|
15
|
+
end
|
8
16
|
end
|
9
17
|
|
10
18
|
# Passes if actual returns `false` for `persisted?`.
|
@@ -1,4 +1,3 @@
|
|
1
|
-
require 'rspec/core'
|
2
1
|
require 'rspec/core/rake_task'
|
3
2
|
if default = Rake.application.instance_variable_get('@tasks')['default']
|
4
3
|
default.prerequisites.delete('test')
|
@@ -8,7 +7,7 @@ orm_setting = Rails.configuration.generators.options[:rails][:orm]
|
|
8
7
|
spec_prereq = if(orm_setting == :active_record)
|
9
8
|
Rails.configuration.active_record[:schema_format] == :sql ? "db:test:clone_structure" : "db:test:prepare"
|
10
9
|
else
|
11
|
-
:noop
|
10
|
+
:noop
|
12
11
|
end
|
13
12
|
task :noop do; end
|
14
13
|
task :default => :spec
|
@@ -12,9 +12,7 @@ if defined?(Capybara)
|
|
12
12
|
RSpec.configure do |c|
|
13
13
|
if defined?(Capybara::DSL)
|
14
14
|
c.include Capybara::DSL, :type => :controller
|
15
|
-
c.include Capybara::DSL, :
|
16
|
-
:file_path => c.escaped_path(%w[spec features])
|
17
|
-
}
|
15
|
+
c.include Capybara::DSL, :type => :feature
|
18
16
|
end
|
19
17
|
|
20
18
|
if defined?(Capybara::RSpecMatchers)
|
@@ -27,11 +25,7 @@ if defined?(Capybara)
|
|
27
25
|
}
|
28
26
|
end
|
29
27
|
|
30
|
-
|
31
|
-
c.include RSpec::Rails::RailsExampleGroup, :example_group => {
|
32
|
-
:file_path => c.escaped_path(%w[spec features])
|
33
|
-
}
|
34
|
-
else
|
28
|
+
unless defined?(Capybara::RSpecMatchers) || defined?(Capybara::DSL)
|
35
29
|
c.include Capybara, :type => :request
|
36
30
|
c.include Capybara, :type => :controller
|
37
31
|
end
|
data/lib/rspec/rails/version.rb
CHANGED
@@ -8,19 +8,19 @@ describe Autotest::RailsRspec2 do
|
|
8
8
|
describe 'exceptions' do
|
9
9
|
let(:exceptions_regexp) { rails_rspec2_autotest.exceptions }
|
10
10
|
|
11
|
-
it "
|
11
|
+
it "matches './log/test.log'" do
|
12
12
|
exceptions_regexp.should match('./log/test.log')
|
13
13
|
end
|
14
14
|
|
15
|
-
it "
|
15
|
+
it "matches 'log/test.log'" do
|
16
16
|
exceptions_regexp.should match('log/test.log')
|
17
17
|
end
|
18
18
|
|
19
|
-
it "
|
19
|
+
it "does not match './spec/models/user_spec.rb'" do
|
20
20
|
exceptions_regexp.should_not match('./spec/models/user_spec.rb')
|
21
21
|
end
|
22
22
|
|
23
|
-
it "
|
23
|
+
it "does not match 'spec/models/user_spec.rb'" do
|
24
24
|
exceptions_regexp.should_not match('spec/models/user_spec.rb')
|
25
25
|
end
|
26
26
|
end
|
@@ -9,7 +9,7 @@ describe Rspec::Generators::ModelGenerator do
|
|
9
9
|
|
10
10
|
before { prepare_destination }
|
11
11
|
|
12
|
-
it '
|
12
|
+
it 'runs both the model and fixture tasks' do
|
13
13
|
gen = generator %w(posts)
|
14
14
|
gen.should_receive :create_model_spec
|
15
15
|
gen.should_receive :create_fixture_file
|
@@ -14,6 +14,7 @@ describe Rspec::Generators::ScaffoldGenerator do
|
|
14
14
|
before { run_generator %w(posts) }
|
15
15
|
it { should contain(/require 'spec_helper'/) }
|
16
16
|
it { should contain(/describe PostsController/) }
|
17
|
+
it { should contain(%({ "these" => "params" })) }
|
17
18
|
end
|
18
19
|
|
19
20
|
describe 'with --no-controller_specs' do
|
@@ -22,6 +23,13 @@ describe Rspec::Generators::ScaffoldGenerator do
|
|
22
23
|
end
|
23
24
|
end
|
24
25
|
|
26
|
+
describe 'controller spec with attributes specified' do
|
27
|
+
subject { file('spec/controllers/posts_controller_spec.rb') }
|
28
|
+
before { run_generator %w(posts title:string) }
|
29
|
+
|
30
|
+
it { should contain(%({ "title" => "MyString" })) }
|
31
|
+
end
|
32
|
+
|
25
33
|
describe 'namespaced controller spec' do
|
26
34
|
subject { file('spec/controllers/admin/posts_controller_spec.rb') }
|
27
35
|
before { run_generator %w(admin/posts) }
|
@@ -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 => :model to the metadata" do
|
9
|
+
group = RSpec::Core::ExampleGroup.describe do
|
10
|
+
include FeatureExampleGroup
|
11
|
+
end
|
12
|
+
|
13
|
+
expect(group.metadata[:type]).to eql(: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 eql("/foo")
|
26
|
+
expect(group.new.foo_url).to eql("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 eql("success: /foo")
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
@@ -113,10 +113,16 @@ module RSpec::Rails
|
|
113
113
|
view_spec.render
|
114
114
|
view_spec.received.first.should == [{:template => "widgets/new"},{}, nil]
|
115
115
|
end
|
116
|
+
|
116
117
|
it "converts the filename components into render options" do
|
117
118
|
view_spec.stub(:_default_file_to_render) { "widgets/new.en.html.erb" }
|
118
119
|
view_spec.render
|
119
|
-
|
120
|
+
|
121
|
+
if ::Rails.version >= "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
|
120
126
|
end
|
121
127
|
end
|
122
128
|
|
@@ -4,16 +4,30 @@ describe "be_new_record" do
|
|
4
4
|
include RSpec::Rails::Matchers
|
5
5
|
|
6
6
|
context "un-persisted record" do
|
7
|
+
let(:record) { double('record', :persisted? => false) }
|
8
|
+
|
7
9
|
it "passes" do
|
8
|
-
record = double('record', :persisted? => false)
|
9
10
|
record.should be_new_record
|
10
11
|
end
|
12
|
+
|
13
|
+
it "fails with custom failure message" do
|
14
|
+
expect {
|
15
|
+
expect(record).not_to be_new_record
|
16
|
+
}.to raise_exception(/expected .* to be persisted, but was a new record/)
|
17
|
+
end
|
11
18
|
end
|
12
19
|
|
13
20
|
context "persisted record" do
|
21
|
+
let(:record) { double('record', :persisted? => true) }
|
22
|
+
|
14
23
|
it "fails" do
|
15
|
-
record = double('record', :persisted? => true)
|
16
24
|
record.should_not be_new_record
|
17
25
|
end
|
26
|
+
|
27
|
+
it "fails with custom failure message" do
|
28
|
+
expect {
|
29
|
+
expect(record).to be_new_record
|
30
|
+
}.to raise_exception(/expected .* to be a new record, but was persisted/)
|
31
|
+
end
|
18
32
|
end
|
19
33
|
end
|