rspec-core 2.5.2 → 2.6.0.rc2
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/.travis.yml +7 -0
- data/Gemfile +10 -13
- data/README.md +4 -1
- data/Rakefile +29 -12
- data/cucumber.yml +1 -1
- data/features/.nav +10 -4
- data/features/Autotest.md +31 -7
- data/features/Changelog.md +36 -6
- data/features/command_line/configure.feature +2 -2
- data/features/command_line/example_name_option.feature +10 -10
- data/features/command_line/exit_status.feature +4 -4
- data/features/command_line/format_option.feature +4 -4
- data/features/command_line/line_number_appended_to_path.feature +11 -11
- data/features/command_line/line_number_option.feature +2 -2
- data/features/command_line/rake_task.feature +3 -3
- data/features/command_line/tag.feature +26 -10
- data/features/configuration/alias_example_to.feature +48 -0
- data/features/configuration/custom_settings.feature +3 -3
- data/features/configuration/fail_fast.feature +3 -3
- data/features/configuration/read_options_from_file.feature +4 -4
- data/features/example_groups/basic_structure.feature +11 -15
- data/features/example_groups/shared_context.feature +74 -0
- data/features/example_groups/shared_example_group.feature +21 -17
- data/features/expectation_framework_integration/configure_expectation_framework.feature +15 -4
- data/features/filtering/exclusion_filters.feature +28 -4
- data/features/filtering/{implicit_filters.feature → if_and_unless.feature} +9 -7
- data/features/filtering/inclusion_filters.feature +26 -3
- data/features/filtering/run_all_when_everything_filtered.feature +1 -1
- data/features/formatters/custom_formatter.feature +1 -1
- data/features/formatters/text_formatter.feature +45 -0
- data/features/helper_methods/arbitrary_methods.feature +2 -2
- data/features/helper_methods/let.feature +2 -2
- data/features/helper_methods/modules.feature +149 -0
- data/features/hooks/around_hooks.feature +11 -11
- data/features/hooks/before_and_after_hooks.feature +15 -19
- data/features/hooks/filtering.feature +160 -124
- data/features/metadata/current_example.feature +17 -0
- data/features/metadata/described_class.feature +2 -2
- data/features/metadata/user_defined.feature +111 -0
- data/features/mock_framework_integration/use_any_framework.feature +1 -1
- data/features/mock_framework_integration/use_flexmock.feature +83 -10
- data/features/mock_framework_integration/use_mocha.feature +84 -10
- data/features/mock_framework_integration/use_rr.feature +85 -10
- data/features/mock_framework_integration/use_rspec.feature +84 -10
- data/features/pending/pending_examples.feature +8 -8
- data/features/spec_files/arbitrary_file_suffix.feature +1 -1
- data/features/step_definitions/additional_cli_steps.rb +11 -1
- data/features/subject/attribute_of_subject.feature +24 -4
- data/features/subject/explicit_subject.feature +5 -5
- data/features/subject/implicit_receiver.feature +2 -2
- data/features/subject/implicit_subject.feature +2 -2
- data/features/support/env.rb +6 -1
- data/lib/rspec/core.rb +22 -0
- data/lib/rspec/core/backward_compatibility.rb +12 -2
- data/lib/rspec/core/command_line.rb +1 -4
- data/lib/rspec/core/configuration.rb +25 -17
- data/lib/rspec/core/configuration_options.rb +6 -23
- data/lib/rspec/core/drb_command_line.rb +5 -11
- data/lib/rspec/core/example.rb +29 -21
- data/lib/rspec/core/example_group.rb +36 -4
- data/lib/rspec/core/formatters/base_formatter.rb +6 -0
- data/lib/rspec/core/formatters/base_text_formatter.rb +1 -1
- data/lib/rspec/core/formatters/helpers.rb +0 -4
- data/lib/rspec/core/hooks.rb +14 -4
- data/lib/rspec/core/metadata.rb +1 -1
- data/lib/rspec/core/metadata_hash_builder.rb +93 -0
- data/lib/rspec/core/mocking/with_flexmock.rb +2 -0
- data/lib/rspec/core/mocking/with_mocha.rb +2 -0
- data/lib/rspec/core/mocking/with_rr.rb +2 -0
- data/lib/rspec/core/mocking/with_rspec.rb +3 -1
- data/lib/rspec/core/option_parser.rb +5 -2
- data/lib/rspec/core/pending.rb +10 -3
- data/lib/rspec/core/reporter.rb +2 -2
- data/lib/rspec/core/runner.rb +7 -1
- data/lib/rspec/core/shared_example_group.rb +18 -4
- data/lib/rspec/core/subject.rb +4 -6
- data/lib/rspec/core/version.rb +1 -1
- data/lib/rspec/core/world.rb +16 -4
- data/rspec-core.gemspec +4 -3
- data/spec.txt +1126 -0
- data/spec/autotest/failed_results_re_spec.rb +2 -2
- data/spec/rspec/core/command_line_spec.rb +0 -2
- data/spec/rspec/core/configuration_spec.rb +84 -1
- data/spec/rspec/core/deprecations_spec.rb +21 -0
- data/spec/rspec/core/drb_command_line_spec.rb +3 -11
- data/spec/rspec/core/example_group_spec.rb +213 -56
- data/spec/rspec/core/example_spec.rb +110 -0
- data/spec/rspec/core/formatters/base_formatter_spec.rb +23 -2
- data/spec/rspec/core/formatters/base_text_formatter_spec.rb +9 -0
- data/spec/rspec/core/formatters/helpers_spec.rb +1 -1
- data/spec/rspec/core/formatters/html_formatted-1.8.6.html +5 -5
- data/spec/rspec/core/formatters/html_formatted-1.8.7-jruby.html +8 -10
- data/spec/rspec/core/formatters/html_formatted-1.8.7.html +5 -5
- data/spec/rspec/core/formatters/html_formatted-1.9.1.html +5 -5
- data/spec/rspec/core/formatters/html_formatted-1.9.2.html +5 -5
- data/spec/rspec/core/formatters/progress_formatter_spec.rb +0 -1
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.6.html +5 -5
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7-jruby.html +8 -10
- data/spec/rspec/core/formatters/text_mate_formatted-1.8.7.html +5 -5
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.1.html +5 -5
- data/spec/rspec/core/formatters/text_mate_formatted-1.9.2.html +5 -5
- data/spec/rspec/core/hooks_spec.rb +86 -0
- data/spec/rspec/core/metadata_spec.rb +7 -7
- data/spec/rspec/core/option_parser_spec.rb +8 -0
- data/spec/rspec/core/pending_example_spec.rb +12 -51
- data/spec/rspec/core/reporter_spec.rb +19 -3
- data/spec/rspec/core/resources/formatter_specs.rb +7 -1
- data/spec/rspec/core/rspec_matchers_spec.rb +45 -0
- data/spec/rspec/core/runner_spec.rb +35 -10
- data/spec/rspec/core/shared_example_group_spec.rb +57 -21
- data/spec/rspec/core/subject_spec.rb +32 -11
- data/spec/rspec/core/world_spec.rb +38 -15
- data/spec/rspec/core_spec.rb +28 -0
- data/spec/spec_helper.rb +22 -2
- data/spec/support/matchers.rb +44 -13
- data/spec/support/shared_example_groups.rb +41 -0
- metadata +39 -16
|
@@ -21,7 +21,7 @@ Feature: --line_number option
|
|
|
21
21
|
|
|
22
22
|
end
|
|
23
23
|
"""
|
|
24
|
-
When I run
|
|
24
|
+
When I run `rspec example_spec.rb --line_number 5 --format doc`
|
|
25
25
|
Then the examples should all pass
|
|
26
26
|
Then the output should contain "should be > 8"
|
|
27
27
|
But the output should not contain "should be < 10"
|
|
@@ -39,7 +39,7 @@ Feature: --line_number option
|
|
|
39
39
|
|
|
40
40
|
end
|
|
41
41
|
"""
|
|
42
|
-
When I run
|
|
42
|
+
When I run `rspec example_spec.rb --line_number 5 --format doc`
|
|
43
43
|
Then the examples should all pass
|
|
44
44
|
Then the output should contain "should be > 8"
|
|
45
45
|
But the output should not contain "should be < 10"
|
|
@@ -19,7 +19,7 @@ Feature: rake task
|
|
|
19
19
|
end
|
|
20
20
|
end
|
|
21
21
|
"""
|
|
22
|
-
When I run
|
|
22
|
+
When I run `rake`
|
|
23
23
|
Then the stderr should contain "ruby -S rspec"
|
|
24
24
|
Then the exit status should be 0
|
|
25
25
|
|
|
@@ -40,7 +40,7 @@ Feature: rake task
|
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
42
|
"""
|
|
43
|
-
When I run
|
|
43
|
+
When I run `rake`
|
|
44
44
|
Then the exit status should be 1
|
|
45
45
|
|
|
46
46
|
Scenario: fail_on_error = false with failing spec (exit status is 0)
|
|
@@ -62,7 +62,7 @@ Feature: rake task
|
|
|
62
62
|
end
|
|
63
63
|
end
|
|
64
64
|
"""
|
|
65
|
-
When I run
|
|
65
|
+
When I run `rake`
|
|
66
66
|
Then the exit status should be 0
|
|
67
67
|
|
|
68
68
|
|
|
@@ -19,7 +19,8 @@ Feature: --tag option
|
|
|
19
19
|
"""
|
|
20
20
|
describe "group with tagged specs" do
|
|
21
21
|
it "example I'm working now", :focus => true do; end
|
|
22
|
-
it "special example", :type => 'special' do; end
|
|
22
|
+
it "special example with string", :type => 'special' do; end
|
|
23
|
+
it "special example with symbol", :type => :special do; end
|
|
23
24
|
it "slow example", :skip => true do; end
|
|
24
25
|
it "ordinary example", :speed => 'slow' do; end
|
|
25
26
|
it "untagged example" do; end
|
|
@@ -27,29 +28,30 @@ Feature: --tag option
|
|
|
27
28
|
"""
|
|
28
29
|
|
|
29
30
|
Scenario: filter examples with non-existent tag
|
|
30
|
-
When I run
|
|
31
|
+
When I run `rspec . --tag mytag`
|
|
31
32
|
And the examples should all pass
|
|
32
33
|
|
|
33
34
|
Scenario: filter examples with a simple tag
|
|
34
|
-
When I run
|
|
35
|
+
When I run `rspec . --tag focus`
|
|
35
36
|
Then the output should contain "Run filtered using {:focus=>true}"
|
|
36
37
|
And the examples should all pass
|
|
37
38
|
|
|
38
39
|
Scenario: filter examples with a simple tag and @
|
|
39
|
-
When I run
|
|
40
|
+
When I run `rspec . --tag @focus`
|
|
40
41
|
Then the output should contain "Run filtered using {:focus=>true}"
|
|
41
42
|
Then the examples should all pass
|
|
42
43
|
|
|
43
44
|
Scenario: filter examples with a name:value tag
|
|
44
|
-
When I run
|
|
45
|
+
When I run `rspec . --tag type:special`
|
|
45
46
|
Then the output should contain:
|
|
46
47
|
"""
|
|
47
48
|
Run filtered using {:type=>"special"}
|
|
48
49
|
"""
|
|
50
|
+
And the output should contain "2 examples"
|
|
49
51
|
And the examples should all pass
|
|
50
52
|
|
|
51
53
|
Scenario: filter examples with a name:value tag and @
|
|
52
|
-
When I run
|
|
54
|
+
When I run `rspec . --tag @type:special`
|
|
53
55
|
Then the output should contain:
|
|
54
56
|
"""
|
|
55
57
|
Run filtered using {:type=>"special"}
|
|
@@ -57,18 +59,32 @@ Feature: --tag option
|
|
|
57
59
|
And the examples should all pass
|
|
58
60
|
|
|
59
61
|
Scenario: exclude examples with a simple tag
|
|
60
|
-
When I run
|
|
62
|
+
When I run `rspec . --tag ~skip`
|
|
63
|
+
Then the output should contain "Run filtered excluding {:skip=>true}"
|
|
61
64
|
Then the examples should all pass
|
|
62
65
|
|
|
63
66
|
Scenario: exclude examples with a simple tag and @
|
|
64
|
-
When I run
|
|
67
|
+
When I run `rspec . --tag ~@skip`
|
|
68
|
+
Then the output should contain "Run filtered excluding {:skip=>true}"
|
|
65
69
|
Then the examples should all pass
|
|
66
70
|
|
|
67
71
|
Scenario: exclude examples with a name:value tag
|
|
68
|
-
When I run
|
|
72
|
+
When I run `rspec . --tag ~speed:slow`
|
|
73
|
+
Then the output should contain:
|
|
74
|
+
"""
|
|
75
|
+
Run filtered excluding {:speed=>"slow"}
|
|
76
|
+
"""
|
|
69
77
|
Then the examples should all pass
|
|
70
78
|
|
|
71
79
|
Scenario: exclude examples with a name:value tag and @
|
|
72
|
-
When I run
|
|
80
|
+
When I run `rspec . --tag ~@speed:slow`
|
|
81
|
+
Then the output should contain:
|
|
82
|
+
"""
|
|
83
|
+
Run filtered excluding {:speed=>"slow"}
|
|
84
|
+
"""
|
|
73
85
|
Then the examples should all pass
|
|
74
86
|
|
|
87
|
+
Scenario: filter examples with a simple tag, exclude examples with another tag
|
|
88
|
+
When I run `rspec . --tag focus --tag ~skip`
|
|
89
|
+
Then the output should contain "Run filtered using {:focus=>true}, excluding {:skip=>true}"
|
|
90
|
+
And the examples should all pass
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
Feature: alias_example_to
|
|
2
|
+
|
|
3
|
+
Use `config.alias_example_to` to create new example group methods
|
|
4
|
+
that define examples with the configured metadata.
|
|
5
|
+
|
|
6
|
+
If you set the `treat_symbols_as_metadata_keys_with_true_values` config option
|
|
7
|
+
to `true`, you can specify metadata using only symbols.
|
|
8
|
+
|
|
9
|
+
Scenario: Use alias_example_to to define focused example
|
|
10
|
+
Given a file named "alias_example_to_spec.rb" with:
|
|
11
|
+
"""
|
|
12
|
+
RSpec.configure do |c|
|
|
13
|
+
c.alias_example_to :fit, :focused => true
|
|
14
|
+
c.filter_run :focused => true
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
describe "an example group" do
|
|
18
|
+
it "does one thing" do
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
fit "does another thing" do
|
|
22
|
+
end
|
|
23
|
+
end
|
|
24
|
+
"""
|
|
25
|
+
When I run `rspec alias_example_to_spec.rb --format doc`
|
|
26
|
+
Then the output should contain "does another thing"
|
|
27
|
+
And the output should not contain "does one thing"
|
|
28
|
+
|
|
29
|
+
Scenario: use symbols as metadata
|
|
30
|
+
Given a file named "use_symbols_as_metadata_spec.rb" with:
|
|
31
|
+
"""
|
|
32
|
+
RSpec.configure do |c|
|
|
33
|
+
c.treat_symbols_as_metadata_keys_with_true_values = true
|
|
34
|
+
c.alias_example_to :fit, :focused
|
|
35
|
+
c.filter_run :focused
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
describe "an example group" do
|
|
39
|
+
it "does one thing" do
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
fit "does another thing" do
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
"""
|
|
46
|
+
When I run `rspec use_symbols_as_metadata_spec.rb --format doc`
|
|
47
|
+
Then the output should contain "does another thing"
|
|
48
|
+
And the output should not contain "does one thing"
|
|
@@ -29,7 +29,7 @@ Feature: custom settings
|
|
|
29
29
|
end
|
|
30
30
|
end
|
|
31
31
|
"""
|
|
32
|
-
When I run
|
|
32
|
+
When I run `rspec ./additional_setting_spec.rb`
|
|
33
33
|
Then the examples should all pass
|
|
34
34
|
|
|
35
35
|
Scenario: default to true
|
|
@@ -55,7 +55,7 @@ Feature: custom settings
|
|
|
55
55
|
end
|
|
56
56
|
end
|
|
57
57
|
"""
|
|
58
|
-
When I run
|
|
58
|
+
When I run `rspec ./additional_setting_spec.rb`
|
|
59
59
|
Then the examples should all pass
|
|
60
60
|
|
|
61
61
|
Scenario: overridden in a subsequent RSpec.configure block
|
|
@@ -79,6 +79,6 @@ Feature: custom settings
|
|
|
79
79
|
end
|
|
80
80
|
end
|
|
81
81
|
"""
|
|
82
|
-
When I run
|
|
82
|
+
When I run `rspec ./additional_setting_spec.rb`
|
|
83
83
|
Then the examples should all pass
|
|
84
84
|
|
|
@@ -21,7 +21,7 @@ Feature: fail fast
|
|
|
21
21
|
end
|
|
22
22
|
end
|
|
23
23
|
"""
|
|
24
|
-
When I run
|
|
24
|
+
When I run `rspec spec/example_spec.rb`
|
|
25
25
|
Then the examples should all pass
|
|
26
26
|
|
|
27
27
|
Scenario: fail_fast with first example failing (only runs the one example)
|
|
@@ -37,7 +37,7 @@ Feature: fail fast
|
|
|
37
37
|
end
|
|
38
38
|
end
|
|
39
39
|
"""
|
|
40
|
-
When I run
|
|
40
|
+
When I run `rspec spec/example_spec.rb -fd`
|
|
41
41
|
Then the output should contain "1 example, 1 failure"
|
|
42
42
|
|
|
43
43
|
Scenario: fail_fast with multiple files, second example failing (only runs the first two examples)
|
|
@@ -73,5 +73,5 @@ Feature: fail fast
|
|
|
73
73
|
end
|
|
74
74
|
end
|
|
75
75
|
"""
|
|
76
|
-
When I run
|
|
76
|
+
When I run `rspec spec`
|
|
77
77
|
Then the output should contain "2 examples, 1 failure"
|
|
@@ -30,7 +30,7 @@ Feature: read command line configuration options from files
|
|
|
30
30
|
end
|
|
31
31
|
end
|
|
32
32
|
"""
|
|
33
|
-
When I run
|
|
33
|
+
When I run `rspec ./spec/example_spec.rb`
|
|
34
34
|
Then the examples should all pass
|
|
35
35
|
|
|
36
36
|
Scenario: custom options file
|
|
@@ -47,7 +47,7 @@ Feature: read command line configuration options from files
|
|
|
47
47
|
end
|
|
48
48
|
end
|
|
49
49
|
"""
|
|
50
|
-
When I run
|
|
50
|
+
When I run `rspec spec/example_spec.rb --options my.options`
|
|
51
51
|
Then the examples should all pass
|
|
52
52
|
|
|
53
53
|
Scenario: RSpec ignores ./.rspec when custom options file is used
|
|
@@ -67,7 +67,7 @@ Feature: read command line configuration options from files
|
|
|
67
67
|
end
|
|
68
68
|
end
|
|
69
69
|
"""
|
|
70
|
-
When I run
|
|
70
|
+
When I run `rspec spec/example_spec.rb --options my.options`
|
|
71
71
|
Then the examples should all pass
|
|
72
72
|
|
|
73
73
|
Scenario: using ERB in .rspec
|
|
@@ -83,5 +83,5 @@ Feature: read command line configuration options from files
|
|
|
83
83
|
end
|
|
84
84
|
end
|
|
85
85
|
"""
|
|
86
|
-
When I run
|
|
86
|
+
When I run `rspec ./spec/example_spec.rb`
|
|
87
87
|
Then the examples should all pass
|
|
@@ -4,21 +4,17 @@ Feature: basic structure (describe/it)
|
|
|
4
4
|
behave, organized in groups. It uses the words "describe" and "it" so we can
|
|
5
5
|
express concepts like a conversation:
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
"Describe an account when it is first opened."
|
|
8
|
+
"It has a balance of zero."
|
|
9
9
|
|
|
10
|
-
The describe
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
Within a group, you can declare nested groups using the describe() or
|
|
15
|
-
context() methods. A nested group is actually a subclass of the outer group,
|
|
16
|
-
so it has access to same methods as the outer group, as well as any class
|
|
17
|
-
methods defined in the outer group.
|
|
18
|
-
|
|
19
|
-
The it() method accepts a block, which is later executed in the context of
|
|
20
|
-
an instance of the group in which it is declared.
|
|
10
|
+
The `describe` method creates an example group. Within the block passed to
|
|
11
|
+
`describe` you can declare nested groups using the `describe` or `context`
|
|
12
|
+
methods, or you can declare examples using the `it` or `specify` methods.
|
|
21
13
|
|
|
14
|
+
Under the hood, an example group is a class in which the block passed to
|
|
15
|
+
`describe` or `context` is evaluated. The blocks passed to `it` are evaluated
|
|
16
|
+
in the context of an _instance_ of that class.
|
|
17
|
+
|
|
22
18
|
Scenario: one group, one example
|
|
23
19
|
Given a file named "sample_spec.rb" with:
|
|
24
20
|
"""
|
|
@@ -27,7 +23,7 @@ Feature: basic structure (describe/it)
|
|
|
27
23
|
end
|
|
28
24
|
end
|
|
29
25
|
"""
|
|
30
|
-
When I run
|
|
26
|
+
When I run `rspec sample_spec.rb -fn`
|
|
31
27
|
Then the output should contain:
|
|
32
28
|
"""
|
|
33
29
|
something
|
|
@@ -48,7 +44,7 @@ Feature: basic structure (describe/it)
|
|
|
48
44
|
end
|
|
49
45
|
end
|
|
50
46
|
"""
|
|
51
|
-
When I run
|
|
47
|
+
When I run `rspec nested_example_groups_spec.rb -fdoc`
|
|
52
48
|
Then the output should contain:
|
|
53
49
|
"""
|
|
54
50
|
something
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
Feature: shared context
|
|
2
|
+
|
|
3
|
+
Use `shared_context` to define a block that will be evaluated in the context
|
|
4
|
+
of example groups either explicitly, using `include_context`, or implicitly by
|
|
5
|
+
matching metdata.
|
|
6
|
+
|
|
7
|
+
Background:
|
|
8
|
+
Given a file named "shared_stuff.rb" with:
|
|
9
|
+
"""
|
|
10
|
+
shared_context "shared stuff", :a => :b do
|
|
11
|
+
before { @some_var = :some_value }
|
|
12
|
+
def shared_method
|
|
13
|
+
"it works"
|
|
14
|
+
end
|
|
15
|
+
let(:shared_let) { {'arbitrary' => 'object'} }
|
|
16
|
+
subject do
|
|
17
|
+
'this is the subject'
|
|
18
|
+
end
|
|
19
|
+
end
|
|
20
|
+
"""
|
|
21
|
+
|
|
22
|
+
Scenario: declare shared context and include it with include_context
|
|
23
|
+
Given a file named "shared_context_example.rb" with:
|
|
24
|
+
"""
|
|
25
|
+
require "./shared_stuff.rb"
|
|
26
|
+
|
|
27
|
+
describe "group that includes a shared context using 'include_context'" do
|
|
28
|
+
include_context "shared stuff"
|
|
29
|
+
|
|
30
|
+
it "has access to methods defined in shared context" do
|
|
31
|
+
shared_method.should eq("it works")
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
it "has access to methods defined with let in shared context" do
|
|
35
|
+
shared_let['arbitrary'].should eq('object')
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
it "runs the before hooks defined in the shared context" do
|
|
39
|
+
@some_var.should be(:some_value)
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
it "accesses the subject defined in the shared context" do
|
|
43
|
+
subject.should eq('this is the subject')
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
"""
|
|
47
|
+
When I run `rspec shared_context_example.rb`
|
|
48
|
+
Then the examples should all pass
|
|
49
|
+
|
|
50
|
+
Scenario: declare shared context and include it with metadata
|
|
51
|
+
Given a file named "shared_context_example.rb" with:
|
|
52
|
+
"""
|
|
53
|
+
require "./shared_stuff.rb"
|
|
54
|
+
|
|
55
|
+
describe "group that includes a shared context using metadata", :a => :b do
|
|
56
|
+
it "has access to methods defined in shared context" do
|
|
57
|
+
shared_method.should eq("it works")
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
it "has access to methods defined with let in shared context" do
|
|
61
|
+
shared_let['arbitrary'].should eq('object')
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it "runs the before hooks defined in the shared context" do
|
|
65
|
+
@some_var.should be(:some_value)
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
it "accesses the subject defined in the shared context" do
|
|
69
|
+
subject.should eq('this is the subject')
|
|
70
|
+
end
|
|
71
|
+
end
|
|
72
|
+
"""
|
|
73
|
+
When I run `rspec shared_context_example.rb`
|
|
74
|
+
Then the examples should all pass
|
|
@@ -1,19 +1,23 @@
|
|
|
1
|
-
Feature: shared
|
|
1
|
+
Feature: shared examples
|
|
2
2
|
|
|
3
|
-
Shared
|
|
3
|
+
Shared examples let you describe behaviour of types or modules. When
|
|
4
4
|
declared, a shared group's content is stored. It is only realized in the
|
|
5
5
|
context of another example group, which provides any context the shared group
|
|
6
6
|
needs to run.
|
|
7
7
|
|
|
8
|
-
A shared group is included in another group using
|
|
9
|
-
|
|
8
|
+
A shared group is included in another group using any of:
|
|
9
|
+
|
|
10
|
+
include_examples "name" # include the examples in the current context
|
|
10
11
|
|
|
11
|
-
|
|
12
|
+
it_behaves_like "name" # include the examples in a nested context
|
|
13
|
+
it_should_behave_like "name" # include the examples in a nested context
|
|
14
|
+
|
|
15
|
+
Scenario: shared examples group included in two groups
|
|
12
16
|
Given a file named "collection_spec.rb" with:
|
|
13
17
|
"""
|
|
14
18
|
require "set"
|
|
15
19
|
|
|
16
|
-
|
|
20
|
+
shared_examples "a collection" do
|
|
17
21
|
let(:collection) { described_class.new([7, 2, 4]) }
|
|
18
22
|
|
|
19
23
|
context "initialized with 3 items" do
|
|
@@ -45,7 +49,7 @@ Feature: shared example group
|
|
|
45
49
|
it_behaves_like "a collection"
|
|
46
50
|
end
|
|
47
51
|
"""
|
|
48
|
-
When I run
|
|
52
|
+
When I run `rspec collection_spec.rb --format documentation`
|
|
49
53
|
Then the examples should all pass
|
|
50
54
|
And the output should contain:
|
|
51
55
|
"""
|
|
@@ -75,7 +79,7 @@ Feature: shared example group
|
|
|
75
79
|
"""
|
|
76
80
|
require "set"
|
|
77
81
|
|
|
78
|
-
|
|
82
|
+
shared_examples "a collection object" do
|
|
79
83
|
describe "<<" do
|
|
80
84
|
it "adds objects to the end of the collection" do
|
|
81
85
|
collection << 1
|
|
@@ -86,28 +90,28 @@ Feature: shared example group
|
|
|
86
90
|
end
|
|
87
91
|
|
|
88
92
|
describe Array do
|
|
89
|
-
|
|
93
|
+
it_behaves_like "a collection object" do
|
|
90
94
|
let(:collection) { Array.new }
|
|
91
95
|
end
|
|
92
96
|
end
|
|
93
97
|
|
|
94
98
|
describe Set do
|
|
95
|
-
|
|
99
|
+
it_behaves_like "a collection object" do
|
|
96
100
|
let(:collection) { Set.new }
|
|
97
101
|
end
|
|
98
102
|
end
|
|
99
103
|
"""
|
|
100
|
-
When I run
|
|
104
|
+
When I run `rspec shared_example_group_spec.rb --format documentation`
|
|
101
105
|
Then the examples should all pass
|
|
102
106
|
And the output should contain:
|
|
103
107
|
"""
|
|
104
108
|
Array
|
|
105
|
-
|
|
109
|
+
behaves like a collection object
|
|
106
110
|
<<
|
|
107
111
|
adds objects to the end of the collection
|
|
108
112
|
|
|
109
113
|
Set
|
|
110
|
-
|
|
114
|
+
behaves like a collection object
|
|
111
115
|
<<
|
|
112
116
|
adds objects to the end of the collection
|
|
113
117
|
"""
|
|
@@ -115,7 +119,7 @@ Feature: shared example group
|
|
|
115
119
|
Scenario: Passing parameters to a shared example group
|
|
116
120
|
Given a file named "shared_example_group_params_spec.rb" with:
|
|
117
121
|
"""
|
|
118
|
-
|
|
122
|
+
shared_examples "a measurable object" do |measurement, measurement_methods|
|
|
119
123
|
measurement_methods.each do |measurement_method|
|
|
120
124
|
it "should return #{measurement} from ##{measurement_method}" do
|
|
121
125
|
subject.send(measurement_method).should == measurement
|
|
@@ -133,7 +137,7 @@ Feature: shared example group
|
|
|
133
137
|
it_should_behave_like "a measurable object", 6, [:size, :length]
|
|
134
138
|
end
|
|
135
139
|
"""
|
|
136
|
-
When I run
|
|
140
|
+
When I run `rspec shared_example_group_params_spec.rb --format documentation`
|
|
137
141
|
Then the examples should all pass
|
|
138
142
|
And the output should contain:
|
|
139
143
|
"""
|
|
@@ -155,7 +159,7 @@ Feature: shared example group
|
|
|
155
159
|
c.alias_it_should_behave_like_to :it_has_behavior, 'has behavior:'
|
|
156
160
|
end
|
|
157
161
|
|
|
158
|
-
|
|
162
|
+
shared_examples 'sortability' do
|
|
159
163
|
it 'responds to <=>' do
|
|
160
164
|
sortable.should respond_to(:<=>)
|
|
161
165
|
end
|
|
@@ -167,7 +171,7 @@ Feature: shared example group
|
|
|
167
171
|
end
|
|
168
172
|
end
|
|
169
173
|
"""
|
|
170
|
-
When I run
|
|
174
|
+
When I run `rspec shared_example_group_spec.rb --format documentation`
|
|
171
175
|
Then the examples should all pass
|
|
172
176
|
And the output should contain:
|
|
173
177
|
"""
|