rspec-rails 2.14.0.rc1 → 2.14.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Changelog.md +12 -0
- data/README.md +2 -2
- data/features/Autotest.md +24 -0
- 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/feature_specs/feature_spec.feature +34 -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 +22 -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/env.rb +53 -0
- data/features/support/rails_versions.rb +4 -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/rspec/rails/example/controller_example_group.rb +2 -4
- data/lib/rspec/rails/extensions/active_record/base.rb +8 -2
- data/lib/rspec/rails/mocks.rb +15 -10
- data/lib/rspec/rails/tasks/rspec.rake +7 -7
- data/lib/rspec/rails/version.rb +1 -1
- data/spec/autotest/rails_rspec2_spec.rb +36 -0
- 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 +64 -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/errors_on_spec.rb +38 -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 +379 -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 +31 -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 +192 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d8abb1f01a347fd1b2a6ec73a1fa43744b8b721
|
4
|
+
data.tar.gz: 2217552c216c853b6cfb550680193da17b324269
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 303482e646eba42a2a8b5eb9a3d6634b769337b3a496db7b40098f0fb99f2dbc9ea05c53f7c12e97dc40dec8802ad69a100e8a26269fd3bd938ed0bac011b345
|
7
|
+
data.tar.gz: 8a4c7c39fe7817b538a3fb79c18cfe9852947c542a7f10b426a491968078f7a4afa6411e8c02f3840c38b7816db6204f10be7734d40fe798d5fe2590c8b71a86
|
data/Changelog.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
### 2.14.0 / 2013-07-06
|
2
|
+
[full changelog](http://github.com/rspec/rspec-rails/compare/v2.14.0.rc1...v2.14.0)
|
3
|
+
|
4
|
+
Bug fixes
|
5
|
+
|
6
|
+
* Rake tasks do not define methods that might interact with other libraries.
|
7
|
+
(Fujimura Daisuke)
|
8
|
+
* Reverts fix for out-of-order `let` definitions in controller specs after the
|
9
|
+
issue was fixed upstream in rspec-core. (Andy Lindeman)
|
10
|
+
* Fixes deprecation warning when using `expect(Model).to have(n).records` with
|
11
|
+
Rails 4. (Andy Lindeman)
|
12
|
+
|
1
13
|
### 2.14.0.rc1 / 2013-05-27
|
2
14
|
[full changelog](http://github.com/rspec/rspec-rails/compare/v2.13.2...v2.14.0.rc1)
|
3
15
|
|
data/README.md
CHANGED
@@ -57,7 +57,7 @@ when commands like `rails generate model` and `rails generate controller` are
|
|
57
57
|
used.
|
58
58
|
|
59
59
|
You may also invoke invoke RSpec generators independently. For instance,
|
60
|
-
running `
|
60
|
+
running `rails generate rspec:model` will generate a model spec. For more
|
61
61
|
information, see [list of all
|
62
62
|
generators](https://www.relishapp.com/rspec/rspec-rails/docs/generators).
|
63
63
|
|
@@ -402,7 +402,7 @@ expect(:get => "/widgets/1/edit").not_to be_routable
|
|
402
402
|
and subsets of tests (e.g., `rake spec:models`).
|
403
403
|
|
404
404
|
A full list of the available rake tasks can be seen by running `rake -T | grep
|
405
|
-
|
405
|
+
spec`.
|
406
406
|
|
407
407
|
## Customizing `rake` tasks
|
408
408
|
|
@@ -0,0 +1,24 @@
|
|
1
|
+
The `rspec:install` generator creates a `.rspec` file, which tells RSpec to
|
2
|
+
tell Autotest that you're using RSpec. You'll also need to add the ZenTest and
|
3
|
+
autotest-rails gems to your Gemfile:
|
4
|
+
|
5
|
+
gem "ZenTest", "~> 4.4.2"
|
6
|
+
gem "autotest-rails", "~> 4.1.0"
|
7
|
+
|
8
|
+
If all of the gems in your Gemfile are installed in system gems, you can just
|
9
|
+
type
|
10
|
+
|
11
|
+
autotest
|
12
|
+
|
13
|
+
If Bundler is managing any gems for you directly (i.e. you've got `:git` or
|
14
|
+
`:path` attributes in the Gemfile), however, you may need to run
|
15
|
+
|
16
|
+
bundle exec autotest
|
17
|
+
|
18
|
+
If you do, you require Autotest's bundler plugin in a `.autotest` file in the
|
19
|
+
project root directory or your home directory:
|
20
|
+
|
21
|
+
require "autotest/bundler"
|
22
|
+
|
23
|
+
Now you can just type `autotest`, it should prefix the generated shell command
|
24
|
+
with `bundle exec`.
|
@@ -0,0 +1,24 @@
|
|
1
|
+
RSpec spec are normally generated alongside other application components.
|
2
|
+
For instance, `rails generate model` will also generate an RSpec spec file
|
3
|
+
for the model.
|
4
|
+
|
5
|
+
Note that the generators are there to help you get started, but they are no
|
6
|
+
substitute for writing your own examples, and they are only guaranteed to work
|
7
|
+
out of the box for with Rails' defaults.
|
8
|
+
|
9
|
+
RSpec generators can also be run independently. For instance,
|
10
|
+
|
11
|
+
rails generate rspec:model widget
|
12
|
+
|
13
|
+
will create a new spec file in `spec/models/widget_spec.rb`.
|
14
|
+
|
15
|
+
The same generator pattern is available for all specs:
|
16
|
+
|
17
|
+
* scaffold
|
18
|
+
* model
|
19
|
+
* controller
|
20
|
+
* helper
|
21
|
+
* view
|
22
|
+
* mailer
|
23
|
+
* observer
|
24
|
+
* integration
|
@@ -0,0 +1,84 @@
|
|
1
|
+
Install Rails-3
|
2
|
+
|
3
|
+
$ gem install rails -v "~> 3.0.0"
|
4
|
+
|
5
|
+
### Generate an app
|
6
|
+
|
7
|
+
$ rails new example
|
8
|
+
$ cd example
|
9
|
+
|
10
|
+
### Add rspec-rails to the Gemfile
|
11
|
+
|
12
|
+
$ echo 'gem "rspec-rails", :group => [:development, :test]' >> Gemfile
|
13
|
+
|
14
|
+
### Install the bundle
|
15
|
+
|
16
|
+
$ bundle install
|
17
|
+
|
18
|
+
### Bootstrap RSpec
|
19
|
+
|
20
|
+
$ rails generate rspec:install
|
21
|
+
|
22
|
+
### Generate a scaffold
|
23
|
+
|
24
|
+
$ rails generate scaffold Widgets name:string
|
25
|
+
|
26
|
+
This generates files in the `app` and `spec` directories. The files in the
|
27
|
+
`app` directory are generated by Rails, and Rails delegates the generation of
|
28
|
+
the files in the `spec` directory to RSpec.
|
29
|
+
|
30
|
+
### Run migrations
|
31
|
+
|
32
|
+
$ rake db:migrate && rake db:test:prepare
|
33
|
+
|
34
|
+
### Run RSpec
|
35
|
+
|
36
|
+
$ rake spec
|
37
|
+
|
38
|
+
or
|
39
|
+
|
40
|
+
$ rspec spec --format documentation
|
41
|
+
|
42
|
+
If all went well, you should see output ending with:
|
43
|
+
|
44
|
+
29 examples, 0 failures, 2 pending
|
45
|
+
|
46
|
+
This output also includes the following controller spec:
|
47
|
+
|
48
|
+
WidgetsController
|
49
|
+
GET index
|
50
|
+
assigns all widgets as @widgets
|
51
|
+
GET show
|
52
|
+
assigns the requested widget as @widget
|
53
|
+
GET new
|
54
|
+
assigns a new widget as @widget
|
55
|
+
GET edit
|
56
|
+
assigns the requested widget as @widget
|
57
|
+
POST create
|
58
|
+
with valid params
|
59
|
+
creates a new Widget
|
60
|
+
assigns a newly created widget as @widget
|
61
|
+
redirects to the created widget
|
62
|
+
with invalid params
|
63
|
+
assigns a newly created but unsaved widget as @widget
|
64
|
+
re-renders the 'new' template
|
65
|
+
PUT update
|
66
|
+
with valid params
|
67
|
+
updates the requested widget
|
68
|
+
assigns the requested widget as @widget
|
69
|
+
redirects to the widget
|
70
|
+
with invalid params
|
71
|
+
assigns the widget as @widget
|
72
|
+
re-renders the 'edit' template
|
73
|
+
DELETE destroy
|
74
|
+
destroys the requested widget
|
75
|
+
redirects to the widgets list
|
76
|
+
|
77
|
+
Output like this can help to quickly gain a high level understanding of how an
|
78
|
+
object behaves. It also exposes which cases have been specified and which have
|
79
|
+
not. Note the balance between the examples for the `create` and `update`
|
80
|
+
actions. If the `redirects to the widget` example was missing from one or the
|
81
|
+
other, it would be easy to spot.
|
82
|
+
|
83
|
+
Take a look at the generated `spec/controllers/widgets_controller_spec.rb` to
|
84
|
+
get a sense of how to organize your specs to generate output like this.
|
data/features/README.md
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
rspec-rails extends Rails' built-in testing framework to support rspec examples
|
2
|
+
for requests, controllers, models, views, helpers, mailers and routing.
|
3
|
+
|
4
|
+
## Rails-3
|
5
|
+
|
6
|
+
rspec-rails-2 supports rails-3.0.0 and later. For earlier versions of Rails,
|
7
|
+
you need [rspec-rails-1.3](http://rspec.info).
|
8
|
+
|
9
|
+
## Install
|
10
|
+
|
11
|
+
gem install rspec-rails
|
12
|
+
|
13
|
+
This installs the following gems:
|
14
|
+
|
15
|
+
rspec
|
16
|
+
rspec-core
|
17
|
+
rspec-expectations
|
18
|
+
rspec-mocks
|
19
|
+
rspec-rails
|
20
|
+
|
21
|
+
## Configure
|
22
|
+
|
23
|
+
Add rspec-rails to the :test and :development groups in the Gemfile:
|
24
|
+
|
25
|
+
group :test, :development do
|
26
|
+
gem "rspec-rails", "~> 2.4"
|
27
|
+
end
|
28
|
+
|
29
|
+
It needs to be in the :development group to expose generators and rake tasks
|
30
|
+
without having to type RAILS_ENV=test.
|
31
|
+
|
32
|
+
Now you can run:
|
33
|
+
|
34
|
+
script/rails generate rspec:install
|
35
|
+
|
36
|
+
This adds the spec directory and some skeleton files, including a .rspec
|
37
|
+
file.
|
38
|
+
|
39
|
+
## Webrat and Capybara
|
40
|
+
|
41
|
+
You can choose between webrat or capybara for simulating a browser, automating
|
42
|
+
a browser, or setting expectations using the matchers they supply. Just add
|
43
|
+
your preference to the Gemfile:
|
44
|
+
|
45
|
+
gem "webrat"
|
46
|
+
gem "capybara"
|
47
|
+
|
48
|
+
## Issues
|
49
|
+
|
50
|
+
The documentation for rspec-rails is a work in progress. We'll be adding
|
51
|
+
Cucumber features over time, and clarifying existing ones. If you have
|
52
|
+
specific features you'd like to see added, find the existing documentation
|
53
|
+
incomplete or confusing, or, better yet, wish to write a missing Cucumber
|
54
|
+
feature yourself, please [submit an
|
55
|
+
issue](http://github.com/rspec/rspec-rails/issues) or a [pull
|
56
|
+
request](http://github.com/rspec/rspec-rails).
|
@@ -0,0 +1,84 @@
|
|
1
|
+
When you run `rails generate rspec:install`, the `spec/spec_helper.rb` file
|
2
|
+
includes the following configuration:
|
3
|
+
|
4
|
+
RSpec.configure do |config|
|
5
|
+
config.use_transactional_fixtures = true
|
6
|
+
end
|
7
|
+
|
8
|
+
The name of this setting is a bit misleading. What it really means in Rails
|
9
|
+
is "run every test method within a transaction." In the context of rspec-rails,
|
10
|
+
it means "run every example within a transaction."
|
11
|
+
|
12
|
+
The idea is to start each example with a clean database, create whatever data
|
13
|
+
is necessary for that example, and then remove that data by simply rolling back
|
14
|
+
the transaction at the end of the example.
|
15
|
+
|
16
|
+
### Disabling transactions
|
17
|
+
|
18
|
+
If you prefer to manage the data yourself, or using another tool like
|
19
|
+
[database_cleaner](https://github.com/bmabey/database_cleaner) to do it for you,
|
20
|
+
simply tell RSpec to tell Rails not to manage transactions:
|
21
|
+
|
22
|
+
RSpec.configure do |config|
|
23
|
+
config.use_transactional_fixtures = false
|
24
|
+
end
|
25
|
+
|
26
|
+
### Data created in `before(:each)` are rolled back
|
27
|
+
|
28
|
+
Any data you create in a `before(:each)` hook will be rolled back at the end of
|
29
|
+
the example. This is a good thing because it means that each example is
|
30
|
+
isolated from state that would otherwise be left around by the examples that
|
31
|
+
already ran. For example:
|
32
|
+
|
33
|
+
describe Widget do
|
34
|
+
before(:each) do
|
35
|
+
@widget = Widget.create
|
36
|
+
end
|
37
|
+
|
38
|
+
it "does something" do
|
39
|
+
expect(@widget).to do_something
|
40
|
+
end
|
41
|
+
|
42
|
+
it "does something else" do
|
43
|
+
expect(@widget).to do_something_else
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
The `@widget` is recreated in each of the two examples above, so each example
|
48
|
+
has a different object, _and_ the underlying data is rolled back so the data
|
49
|
+
backing the `@widget` in each example is new.
|
50
|
+
|
51
|
+
### Data created in `before(:all)` are _not_ rolled back
|
52
|
+
|
53
|
+
`before(:all)` hooks are invoked before the transaction is opened. You can use
|
54
|
+
this to speed things up by creating data once before any example in a group is
|
55
|
+
run, however, this introduces a number of complications and you should only do
|
56
|
+
this if you have a firm grasp of the implications. Here are a couple of
|
57
|
+
guidelines:
|
58
|
+
|
59
|
+
1. Be sure to clean up any data in an `after(:all)` hook:
|
60
|
+
|
61
|
+
before(:all) do
|
62
|
+
@widget = Widget.create!
|
63
|
+
end
|
64
|
+
|
65
|
+
after(:all) do
|
66
|
+
@widget.destroy
|
67
|
+
end
|
68
|
+
|
69
|
+
If you don't do that, you'll leave data lying around that will eventually
|
70
|
+
interfere with other examples.
|
71
|
+
|
72
|
+
2. Reload the object in a `before(:each)` hook.
|
73
|
+
|
74
|
+
before(:all) do
|
75
|
+
@widget = Widget.create!
|
76
|
+
end
|
77
|
+
|
78
|
+
before(:each) do
|
79
|
+
@widget.reload
|
80
|
+
end
|
81
|
+
|
82
|
+
Even though database updates in each example will be rolled back, the
|
83
|
+
object won't _know_ about those rollbacks so the object and its backing
|
84
|
+
data can easily get out of sync.
|
data/features/Upgrade.md
ADDED
@@ -0,0 +1,121 @@
|
|
1
|
+
# Upgrading from rspec-rails-1.x to rspec-rails-2.
|
2
|
+
|
3
|
+
This is a work in progress. Please submit errata, missing steps, or patches to
|
4
|
+
the [rspec-rails issue tracker](https://github.com/rspec/rspec-rails/issues).
|
5
|
+
|
6
|
+
## Rake tasks
|
7
|
+
|
8
|
+
Delete lib/tasks/rspec.rake, if present. Rake tasks now live in the rspec-rails
|
9
|
+
gem.
|
10
|
+
|
11
|
+
## `spec_helper.rb`
|
12
|
+
|
13
|
+
There were a few changes to the generated `spec/spec_helper.rb` file. We
|
14
|
+
recommend the following:
|
15
|
+
|
16
|
+
1. set aside a copy of your existing `spec/spec_helper.rb` file.
|
17
|
+
2. run `rails generate rspec:install`
|
18
|
+
3. copy any customizations from your old spec_helper to the new one
|
19
|
+
|
20
|
+
If you prefer to make the changes manually in the existing spec_helper, here
|
21
|
+
is what you need to change:
|
22
|
+
|
23
|
+
# rspec-1
|
24
|
+
require 'spec/autorun'
|
25
|
+
|
26
|
+
Spec::Runner.configure do |config|
|
27
|
+
...
|
28
|
+
end
|
29
|
+
|
30
|
+
# rspec-2
|
31
|
+
require 'rspec/rails'
|
32
|
+
|
33
|
+
RSpec.configure do |config|
|
34
|
+
...
|
35
|
+
end
|
36
|
+
|
37
|
+
## Controller specs
|
38
|
+
|
39
|
+
### isolation from view templates
|
40
|
+
|
41
|
+
By default, controller specs do _not_ render view templates. This keeps
|
42
|
+
controller specs isolated from the content of views and their requirements.
|
43
|
+
|
44
|
+
NOTE that the template must exist, but it will not be rendered. This is
|
45
|
+
different from rspec-rails-1.x, in which the template didn't need to exist, but
|
46
|
+
ActionController makes a number of new decisions in Rails 3 based on the
|
47
|
+
existence of the template. To keep the RSpec code free of monkey patches, and
|
48
|
+
to keep the rspec user experience simpler, we decided that this would be a fair
|
49
|
+
trade-off.
|
50
|
+
|
51
|
+
### `response.should render_template`
|
52
|
+
|
53
|
+
This needs to move from before the action to after. For example:
|
54
|
+
|
55
|
+
# rspec-rails-1
|
56
|
+
controller.should render_template("edit")
|
57
|
+
get :edit, :id => "37"
|
58
|
+
|
59
|
+
# rspec-rails-2
|
60
|
+
get :edit, :id => "37"
|
61
|
+
response.should render_template("edit")
|
62
|
+
|
63
|
+
# rspec-rails-2 with expect syntax
|
64
|
+
get :edit, :id => "37"
|
65
|
+
expect(response).to render_template("edit")
|
66
|
+
|
67
|
+
rspec-1 had to monkey patch Rails to get render_template to work before the
|
68
|
+
action, and this broke a couple of times with Rails releases (requiring urgent
|
69
|
+
fix releases in RSpec). Part of the philosophy of rspec-rails-2 is to rely on
|
70
|
+
public APIs in Rails as much as possible. In this case, `render_template`
|
71
|
+
delegates directly to Rails' `assert_template`, which only works after the
|
72
|
+
action.
|
73
|
+
|
74
|
+
## View specs
|
75
|
+
|
76
|
+
### `view.should render_template`
|
77
|
+
|
78
|
+
Rails changed the way it renders partials, so to set an expectation that a
|
79
|
+
partial gets rendered, you need
|
80
|
+
|
81
|
+
render
|
82
|
+
view.should render_template(:partial => "widget/_row")
|
83
|
+
|
84
|
+
### stub_template
|
85
|
+
|
86
|
+
Introduced in rspec-rails-2.2, simulates the presence of view templates on the
|
87
|
+
file system. This supports isolation from partials rendered by the vew template
|
88
|
+
that is the subject of a view example:
|
89
|
+
|
90
|
+
stub_template "widgets/_widget.html.erb" => "This Content"
|
91
|
+
|
92
|
+
### No more `have_tag` or `have_text`
|
93
|
+
|
94
|
+
Before Webrat came along, rspec-rails had its own `have_tag` and `have_text`
|
95
|
+
matchers that wrapped Rails' `assert_select`. Webrat included replacements for
|
96
|
+
these methods, as well as new matchers (`have_selector` and `have_xpath`), all
|
97
|
+
of which rely on Nokogiri to do its work, and are far less brittle than RSpec's
|
98
|
+
`have_tag`.
|
99
|
+
|
100
|
+
Capybara has similar matchers, which will soon be available view specs (they
|
101
|
+
are already available in controller specs with `render_views`).
|
102
|
+
|
103
|
+
Given the brittleness of RSpec's `have_tag` and `have_text` matchers and the
|
104
|
+
presence of new Webrat and Capybara matchers that do a better job, `have_tag`
|
105
|
+
and `have_text` were not included in rspec-rails-2.
|
106
|
+
|
107
|
+
## Mocks, stubs, doubles
|
108
|
+
|
109
|
+
### as_new_record
|
110
|
+
|
111
|
+
Earlier versions of the view generators generated stub_model with `:new_record?
|
112
|
+
=> true`. That is no longer recognized in rspec-rails-2, so you need to change
|
113
|
+
this:
|
114
|
+
|
115
|
+
stub_model(Widget, :new_record? => true)
|
116
|
+
|
117
|
+
to this:
|
118
|
+
|
119
|
+
stub_model(Widget).as_new_record
|
120
|
+
|
121
|
+
Generators in 2.0.0 final release will do the latter.
|