rspec-core 3.0.0.beta2 → 3.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (201) hide show
  1. checksums.yaml +7 -0
  2. checksums.yaml.gz.sig +0 -0
  3. data.tar.gz.sig +0 -0
  4. data/.yardopts +1 -0
  5. data/Changelog.md +297 -57
  6. data/README.md +16 -13
  7. data/lib/rspec/core.rb +55 -84
  8. data/lib/rspec/core/backport_random.rb +35 -3
  9. data/lib/rspec/core/backtrace_formatter.rb +4 -13
  10. data/lib/rspec/core/configuration.rb +330 -114
  11. data/lib/rspec/core/configuration_options.rb +38 -22
  12. data/lib/rspec/core/drb.rb +111 -0
  13. data/lib/rspec/core/dsl.rb +8 -2
  14. data/lib/rspec/core/example.rb +203 -94
  15. data/lib/rspec/core/example_group.rb +344 -316
  16. data/lib/rspec/core/filter_manager.rb +135 -90
  17. data/lib/rspec/core/flat_map.rb +1 -0
  18. data/lib/rspec/core/formatters.rb +50 -14
  19. data/lib/rspec/core/formatters/base_formatter.rb +32 -138
  20. data/lib/rspec/core/formatters/base_text_formatter.rb +32 -253
  21. data/lib/rspec/core/formatters/console_codes.rb +65 -0
  22. data/lib/rspec/core/formatters/deprecation_formatter.rb +24 -15
  23. data/lib/rspec/core/formatters/documentation_formatter.rb +7 -10
  24. data/lib/rspec/core/formatters/helpers.rb +15 -9
  25. data/lib/rspec/core/formatters/html_formatter.rb +17 -16
  26. data/lib/rspec/core/formatters/html_printer.rb +1 -0
  27. data/lib/rspec/core/formatters/json_formatter.rb +18 -20
  28. data/lib/rspec/core/formatters/profile_formatter.rb +67 -0
  29. data/lib/rspec/core/formatters/progress_formatter.rb +6 -7
  30. data/lib/rspec/core/formatters/snippet_extractor.rb +8 -6
  31. data/lib/rspec/core/hooks.rb +131 -125
  32. data/lib/rspec/core/memoized_helpers.rb +31 -26
  33. data/lib/rspec/core/metadata.rb +277 -184
  34. data/lib/rspec/core/metadata_filter.rb +86 -0
  35. data/lib/rspec/core/minitest_assertions_adapter.rb +28 -0
  36. data/lib/rspec/core/mocking_adapters/flexmock.rb +1 -1
  37. data/lib/rspec/core/mocking_adapters/mocha.rb +1 -1
  38. data/lib/rspec/core/mocking_adapters/null.rb +1 -1
  39. data/lib/rspec/core/mocking_adapters/rr.rb +2 -1
  40. data/lib/rspec/core/mocking_adapters/rspec.rb +1 -1
  41. data/lib/rspec/core/notifications.rb +435 -24
  42. data/lib/rspec/core/option_parser.rb +16 -25
  43. data/lib/rspec/core/ordering.rb +3 -1
  44. data/lib/rspec/core/pending.rb +57 -33
  45. data/lib/rspec/core/project_initializer.rb +2 -0
  46. data/lib/rspec/core/project_initializer/spec_helper.rb +5 -4
  47. data/lib/rspec/core/rake_task.rb +45 -20
  48. data/lib/rspec/core/reporter.rb +50 -22
  49. data/lib/rspec/core/ruby_project.rb +1 -0
  50. data/lib/rspec/core/runner.rb +93 -39
  51. data/lib/rspec/core/shared_context.rb +7 -5
  52. data/lib/rspec/core/shared_example_group.rb +85 -77
  53. data/lib/rspec/core/test_unit_assertions_adapter.rb +30 -0
  54. data/lib/rspec/core/version.rb +3 -1
  55. data/lib/rspec/core/warnings.rb +35 -17
  56. data/lib/rspec/core/world.rb +57 -5
  57. metadata +56 -369
  58. metadata.gz.sig +3 -3
  59. data/features/README.md +0 -13
  60. data/features/Upgrade.md +0 -352
  61. data/features/command_line/README.md +0 -25
  62. data/features/command_line/dry_run.feature +0 -29
  63. data/features/command_line/example_name_option.feature +0 -97
  64. data/features/command_line/exit_status.feature +0 -82
  65. data/features/command_line/fail_fast.feature +0 -26
  66. data/features/command_line/format_option.feature +0 -75
  67. data/features/command_line/init.feature +0 -57
  68. data/features/command_line/line_number_appended_to_path.feature +0 -140
  69. data/features/command_line/line_number_option.feature +0 -58
  70. data/features/command_line/order.feature +0 -25
  71. data/features/command_line/pattern_option.feature +0 -49
  72. data/features/command_line/rake_task.feature +0 -122
  73. data/features/command_line/randomization.feature +0 -63
  74. data/features/command_line/require_option.feature +0 -43
  75. data/features/command_line/ruby.feature +0 -23
  76. data/features/command_line/tag.feature +0 -98
  77. data/features/command_line/warnings_option.feature +0 -29
  78. data/features/configuration/alias_example_to.feature +0 -39
  79. data/features/configuration/backtrace_exclusion_patterns.feature +0 -105
  80. data/features/configuration/custom_settings.feature +0 -84
  81. data/features/configuration/default_path.feature +0 -38
  82. data/features/configuration/deprecation_stream.feature +0 -58
  83. data/features/configuration/enable_global_dsl.feature +0 -54
  84. data/features/configuration/fail_fast.feature +0 -77
  85. data/features/configuration/failure_exit_code.feature +0 -36
  86. data/features/configuration/order_and_seed.feature +0 -3
  87. data/features/configuration/output_stream.feature +0 -24
  88. data/features/configuration/overriding_global_ordering.feature +0 -93
  89. data/features/configuration/pattern.feature +0 -38
  90. data/features/configuration/profile.feature +0 -220
  91. data/features/configuration/read_options_from_file.feature +0 -90
  92. data/features/configuration/run_all_when_everything_filtered.feature +0 -76
  93. data/features/example_groups/aliasing.feature +0 -48
  94. data/features/example_groups/basic_structure.feature +0 -55
  95. data/features/example_groups/shared_context.feature +0 -74
  96. data/features/example_groups/shared_examples.feature +0 -286
  97. data/features/expectation_framework_integration/configure_expectation_framework.feature +0 -102
  98. data/features/filtering/exclusion_filters.feature +0 -135
  99. data/features/filtering/if_and_unless.feature +0 -138
  100. data/features/filtering/inclusion_filters.feature +0 -101
  101. data/features/formatters/configurable_colors.feature +0 -31
  102. data/features/formatters/custom_formatter.feature +0 -68
  103. data/features/formatters/json_formatter.feature +0 -30
  104. data/features/formatters/regression_tests.feature +0 -95
  105. data/features/formatters/text_formatter.feature +0 -46
  106. data/features/helper_methods/arbitrary_methods.feature +0 -40
  107. data/features/helper_methods/let.feature +0 -50
  108. data/features/helper_methods/modules.feature +0 -146
  109. data/features/hooks/around_hooks.feature +0 -344
  110. data/features/hooks/before_and_after_hooks.feature +0 -427
  111. data/features/hooks/filtering.feature +0 -232
  112. data/features/metadata/current_example.feature +0 -56
  113. data/features/metadata/described_class.feature +0 -17
  114. data/features/metadata/user_defined.feature +0 -100
  115. data/features/mock_framework_integration/use_any_framework.feature +0 -106
  116. data/features/mock_framework_integration/use_flexmock.feature +0 -94
  117. data/features/mock_framework_integration/use_mocha.feature +0 -95
  118. data/features/mock_framework_integration/use_rr.feature +0 -96
  119. data/features/mock_framework_integration/use_rspec.feature +0 -95
  120. data/features/pending_and_skipped_examples/README.md +0 -3
  121. data/features/pending_and_skipped_examples/pending_examples.feature +0 -118
  122. data/features/pending_and_skipped_examples/skipped_examples.feature +0 -106
  123. data/features/spec_files/arbitrary_file_suffix.feature +0 -13
  124. data/features/step_definitions/additional_cli_steps.rb +0 -83
  125. data/features/subject/explicit_subject.feature +0 -101
  126. data/features/subject/implicit_subject.feature +0 -63
  127. data/features/subject/one_liner_syntax.feature +0 -71
  128. data/features/support/env.rb +0 -21
  129. data/features/support/require_expect_syntax_in_aruba_specs.rb +0 -16
  130. data/features/support/rubinius.rb +0 -6
  131. data/lib/rspec/core/command_line.rb +0 -35
  132. data/lib/rspec/core/drb_command_line.rb +0 -26
  133. data/lib/rspec/core/drb_options.rb +0 -87
  134. data/lib/rspec/core/formatters/legacy_formatter.rb +0 -227
  135. data/lib/rspec/core/shared_example_group/collection.rb +0 -27
  136. data/spec/command_line/order_spec.rb +0 -211
  137. data/spec/rspec/core/backtrace_formatter_spec.rb +0 -230
  138. data/spec/rspec/core/command_line_spec.rb +0 -112
  139. data/spec/rspec/core/command_line_spec_output.txt +0 -0
  140. data/spec/rspec/core/configuration_options_spec.rb +0 -409
  141. data/spec/rspec/core/configuration_spec.rb +0 -1479
  142. data/spec/rspec/core/drb_command_line_spec.rb +0 -102
  143. data/spec/rspec/core/drb_options_spec.rb +0 -193
  144. data/spec/rspec/core/dsl_spec.rb +0 -88
  145. data/spec/rspec/core/example_group_spec.rb +0 -1533
  146. data/spec/rspec/core/example_spec.rb +0 -642
  147. data/spec/rspec/core/filter_manager_spec.rb +0 -229
  148. data/spec/rspec/core/formatters/base_formatter_spec.rb +0 -64
  149. data/spec/rspec/core/formatters/base_text_formatter_spec.rb +0 -303
  150. data/spec/rspec/core/formatters/deprecation_formatter_spec.rb +0 -208
  151. data/spec/rspec/core/formatters/documentation_formatter_spec.rb +0 -75
  152. data/spec/rspec/core/formatters/helpers_spec.rb +0 -104
  153. data/spec/rspec/core/formatters/html_formatted-2.1.0.html +0 -392
  154. data/spec/rspec/core/formatters/html_formatted.html +0 -397
  155. data/spec/rspec/core/formatters/html_formatter_spec.rb +0 -122
  156. data/spec/rspec/core/formatters/json_formatter_spec.rb +0 -206
  157. data/spec/rspec/core/formatters/legacy_formatter_spec.rb +0 -137
  158. data/spec/rspec/core/formatters/progress_formatter_spec.rb +0 -43
  159. data/spec/rspec/core/formatters/snippet_extractor_spec.rb +0 -26
  160. data/spec/rspec/core/formatters_spec.rb +0 -120
  161. data/spec/rspec/core/hooks_filtering_spec.rb +0 -227
  162. data/spec/rspec/core/hooks_spec.rb +0 -294
  163. data/spec/rspec/core/memoized_helpers_spec.rb +0 -495
  164. data/spec/rspec/core/metadata_spec.rb +0 -491
  165. data/spec/rspec/core/option_parser_spec.rb +0 -262
  166. data/spec/rspec/core/ordering_spec.rb +0 -102
  167. data/spec/rspec/core/pending_example_spec.rb +0 -117
  168. data/spec/rspec/core/pending_spec.rb +0 -8
  169. data/spec/rspec/core/project_initializer_spec.rb +0 -73
  170. data/spec/rspec/core/rake_task_spec.rb +0 -146
  171. data/spec/rspec/core/random_spec.rb +0 -47
  172. data/spec/rspec/core/reporter_spec.rb +0 -155
  173. data/spec/rspec/core/resources/a_bar.rb +0 -0
  174. data/spec/rspec/core/resources/a_foo.rb +0 -0
  175. data/spec/rspec/core/resources/a_spec.rb +0 -1
  176. data/spec/rspec/core/resources/custom_example_group_runner.rb +0 -14
  177. data/spec/rspec/core/resources/formatter_specs.rb +0 -58
  178. data/spec/rspec/core/resources/utf8_encoded.rb +0 -8
  179. data/spec/rspec/core/rspec_matchers_spec.rb +0 -45
  180. data/spec/rspec/core/ruby_project_spec.rb +0 -26
  181. data/spec/rspec/core/runner_spec.rb +0 -151
  182. data/spec/rspec/core/shared_context_spec.rb +0 -102
  183. data/spec/rspec/core/shared_example_group/collection_spec.rb +0 -57
  184. data/spec/rspec/core/shared_example_group_spec.rb +0 -114
  185. data/spec/rspec/core/warnings_spec.rb +0 -29
  186. data/spec/rspec/core/world_spec.rb +0 -142
  187. data/spec/rspec/core_spec.rb +0 -91
  188. data/spec/spec_helper.rb +0 -160
  189. data/spec/support/config_options_helper.rb +0 -13
  190. data/spec/support/formatter_support.rb +0 -83
  191. data/spec/support/helper_methods.rb +0 -26
  192. data/spec/support/isolate_load_path_mutation.rb +0 -5
  193. data/spec/support/isolated_directory.rb +0 -10
  194. data/spec/support/isolated_home_directory.rb +0 -16
  195. data/spec/support/legacy_formatter_using_sub_classing_example.rb +0 -87
  196. data/spec/support/matchers.rb +0 -85
  197. data/spec/support/mathn_integration_support.rb +0 -12
  198. data/spec/support/old_style_formatter_example.rb +0 -69
  199. data/spec/support/shared_example_groups.rb +0 -13
  200. data/spec/support/spec_files.rb +0 -44
  201. data/spec/support/stderr_splitter.rb +0 -36
@@ -1,76 +0,0 @@
1
- Feature: run all when everything filtered
2
-
3
- Use the run_all_when_everything_filtered option to tell RSpec to run all the
4
- specs in the case where you try to run a filtered list of specs but no specs
5
- match that filter. This works well when paired with an inclusion filter like
6
- `:focus => true`, as it will run all the examples when none match the
7
- inclusion filter.
8
-
9
- RSpec.configure { |c| c.run_all_when_everything_filtered = true }
10
-
11
- Background:
12
- Given a file named "spec/spec_helper.rb" with:
13
- """ruby
14
- RSpec.configure {|c| c.run_all_when_everything_filtered = true}
15
- """
16
-
17
- Scenario: by default, no specs are run if they are all filtered out by an inclusion tag
18
- Given a file named "spec/example_spec.rb" with:
19
- """ruby
20
- describe "examples" do
21
- it "with no tag" do
22
- end
23
-
24
- it "with no tag as well" do
25
- end
26
- end
27
- """
28
- When I run `rspec spec/example_spec.rb --tag some_tag`
29
- Then the output should contain "0 examples, 0 failures"
30
-
31
- Scenario: specs are still run if they are filtered out by an exclusion tag
32
- Given a file named "spec/example_spec.rb" with:
33
- """ruby
34
- describe "examples" do
35
- it "with no tag" do
36
- end
37
-
38
- it "with no tag as well" do
39
- end
40
- end
41
- """
42
- When I run `rspec spec/example_spec.rb --tag ~some_tag`
43
- Then the output should contain "2 examples, 0 failures"
44
-
45
- Scenario: when the run_all_when_everything_filtered option is turned on, if there are any matches for the filtering tag, only those features are run
46
- Given a file named "spec/example_spec.rb" with:
47
- """ruby
48
- require "spec_helper"
49
- describe "examples" do
50
- it "with no tag", :some_tag => true do
51
- end
52
-
53
- it "with no tag as well" do
54
- end
55
- end
56
- """
57
- When I run `rspec spec/example_spec.rb --tag some_tag`
58
- Then the output should contain "1 example, 0 failures"
59
- And the output should contain "Run options: include {:some_tag=>true}"
60
-
61
- Scenario: when the run_all_when_everything_filtered option is turned on, all the specs are run when the tag has no matches
62
- Given a file named "spec/example_spec.rb" with:
63
- """ruby
64
- require "spec_helper"
65
- describe "examples" do
66
- it "with no tag" do
67
- end
68
-
69
- it "with no tag as well" do
70
- end
71
- end
72
- """
73
- When I run `rspec spec/example_spec.rb --tag some_tag`
74
- Then the output should contain "2 examples, 0 failures"
75
- And the output should contain "All examples were filtered out; ignoring {:some_tag=>true}"
76
-
@@ -1,48 +0,0 @@
1
- Feature: aliasing
2
-
3
- `describe` and `context` are the default aliases for `example_group`.
4
- You can define your own aliases for `example_group` and give those
5
- custom aliases default metadata.
6
-
7
- RSpec provides a few built-in aliases:
8
-
9
- * `xdescribe` and `xcontext` add `:pending` metadata to the
10
- example group in order to temporarily disable the examples.
11
- * `fdescribe` and `fcontext` add `:focus` metadata to the
12
- example group in order to make it easy to temporarily
13
- focus the example group (when combined with `config.filter_run :focus`.)
14
-
15
- Scenario: custom example group aliases with metadata
16
- Given a file named "nested_example_group_aliases_spec.rb" with:
17
- """ruby
18
- RSpec.configure do |c|
19
- c.alias_example_group_to :detail, :detailed => true
20
- end
21
-
22
- RSpec.detail "a detail" do
23
- it "can do some less important stuff" do
24
- end
25
- end
26
-
27
- RSpec.describe "a thing" do
28
- describe "in broad strokes" do
29
- it "can do things" do
30
- end
31
- end
32
-
33
- detail "something less important" do
34
- it "can do an unimportant thing" do
35
- end
36
- end
37
- end
38
- """
39
- When I run `rspec nested_example_group_aliases_spec.rb --tag detailed -fdoc`
40
- Then the output should contain:
41
- """
42
- a detail
43
- can do some less important stuff
44
-
45
- a thing
46
- something less important
47
- """
48
-
@@ -1,55 +0,0 @@
1
- Feature: basic structure (describe/it)
2
-
3
- RSpec is a DSL for creating executable examples of how code is expected to
4
- behave, organized in groups. It uses the words "describe" and "it" so we can
5
- express concepts like a conversation:
6
-
7
- "Describe an account when it is first opened."
8
- "It has a balance of zero."
9
-
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.
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
-
18
- Scenario: one group, one example
19
- Given a file named "sample_spec.rb" with:
20
- """ruby
21
- describe "something" do
22
- it "does something" do
23
- end
24
- end
25
- """
26
- When I run `rspec sample_spec.rb -fdoc`
27
- Then the output should contain:
28
- """
29
- something
30
- does something
31
- """
32
-
33
- Scenario: nested example groups (using context)
34
- Given a file named "nested_example_groups_spec.rb" with:
35
- """ruby
36
- describe "something" do
37
- context "in one context" do
38
- it "does one thing" do
39
- end
40
- end
41
- context "in another context" do
42
- it "does another thing" do
43
- end
44
- end
45
- end
46
- """
47
- When I run `rspec nested_example_groups_spec.rb -fdoc`
48
- Then the output should contain:
49
- """
50
- something
51
- in one context
52
- does one thing
53
- in another context
54
- does another thing
55
- """
@@ -1,74 +0,0 @@
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 metadata.
6
-
7
- Background:
8
- Given a file named "shared_stuff.rb" with:
9
- """ruby
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
- """ruby
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
- expect(shared_method).to eq("it works")
32
- end
33
-
34
- it "has access to methods defined with let in shared context" do
35
- expect(shared_let['arbitrary']).to eq('object')
36
- end
37
-
38
- it "runs the before hooks defined in the shared context" do
39
- expect(@some_var).to be(:some_value)
40
- end
41
-
42
- it "accesses the subject defined in the shared context" do
43
- expect(subject).to 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
- """ruby
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
- expect(shared_method).to eq("it works")
58
- end
59
-
60
- it "has access to methods defined with let in shared context" do
61
- expect(shared_let['arbitrary']).to eq('object')
62
- end
63
-
64
- it "runs the before hooks defined in the shared context" do
65
- expect(@some_var).to be(:some_value)
66
- end
67
-
68
- it "accesses the subject defined in the shared context" do
69
- expect(subject).to 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,286 +0,0 @@
1
- Feature: shared examples
2
-
3
- Shared examples let you describe behaviour of types or modules. When
4
- declared, a shared group's content is stored. It is only realized in the
5
- context of another example group, which provides any context the shared group
6
- needs to run.
7
-
8
- A shared group is included in another group using any of:
9
-
10
- include_examples "name" # include the examples in the current context
11
- it_behaves_like "name" # include the examples in a nested context
12
- it_should_behave_like "name" # include the examples in a nested context
13
- matching metadata # include the examples in the current context
14
-
15
- WARNING: Files containing shared groups must be loaded before the files that
16
- use them. While there are conventions to handle this, RSpec does _not_ do
17
- anything special (like autoload). Doing so would require a strict naming
18
- convention for files that would break existing suites.
19
-
20
- CONVENTIONS:
21
-
22
- 1. The simplest approach is to require files with shared examples explicitly
23
- from the files that use them. Keep in mind that RSpec adds the `spec`
24
- directory to the `LOAD_PATH`, so you can say `require
25
- 'shared_examples_for_widgets'` to require a file at
26
- `#{PROJECT_ROOT}/spec/shared_examples_for_widgets.rb`.
27
-
28
- 2. Put files containing shared examples in `spec/support/` and require files
29
- in that directory from `spec/spec_helper.rb`:
30
-
31
- Dir["./spec/support/**/*.rb"].sort.each {|f| require f}
32
-
33
- This is included in the generated `spec/spec_helper.rb` file in
34
- `rspec-rails`
35
-
36
- 3. When all of the groups that include the shared group, just declare
37
- the shared group in the same file.
38
-
39
- Scenario: shared examples group included in two groups in one file
40
- Given a file named "collection_spec.rb" with:
41
- """ruby
42
- require "set"
43
-
44
- shared_examples "a collection" do
45
- let(:collection) { described_class.new([7, 2, 4]) }
46
-
47
- context "initialized with 3 items" do
48
- it "says it has three items" do
49
- expect(collection.size).to eq(3)
50
- end
51
- end
52
-
53
- describe "#include?" do
54
- context "with an an item that is in the collection" do
55
- it "returns true" do
56
- expect(collection.include?(7)).to be_truthy
57
- end
58
- end
59
-
60
- context "with an an item that is not in the collection" do
61
- it "returns false" do
62
- expect(collection.include?(9)).to be_falsey
63
- end
64
- end
65
- end
66
- end
67
-
68
- describe Array do
69
- it_behaves_like "a collection"
70
- end
71
-
72
- describe Set do
73
- it_behaves_like "a collection"
74
- end
75
- """
76
- When I run `rspec collection_spec.rb --format documentation`
77
- Then the examples should all pass
78
- And the output should contain:
79
- """
80
- Array
81
- behaves like a collection
82
- initialized with 3 items
83
- says it has three items
84
- #include?
85
- with an an item that is in the collection
86
- returns true
87
- with an an item that is not in the collection
88
- returns false
89
-
90
- Set
91
- behaves like a collection
92
- initialized with 3 items
93
- says it has three items
94
- #include?
95
- with an an item that is in the collection
96
- returns true
97
- with an an item that is not in the collection
98
- returns false
99
- """
100
-
101
- Scenario: Providing context to a shared group using a block
102
- Given a file named "shared_example_group_spec.rb" with:
103
- """ruby
104
- require "set"
105
-
106
- shared_examples "a collection object" do
107
- describe "<<" do
108
- it "adds objects to the end of the collection" do
109
- collection << 1
110
- collection << 2
111
- expect(collection.to_a).to match_array([1, 2])
112
- end
113
- end
114
- end
115
-
116
- describe Array do
117
- it_behaves_like "a collection object" do
118
- let(:collection) { Array.new }
119
- end
120
- end
121
-
122
- describe Set do
123
- it_behaves_like "a collection object" do
124
- let(:collection) { Set.new }
125
- end
126
- end
127
- """
128
- When I run `rspec shared_example_group_spec.rb --format documentation`
129
- Then the examples should all pass
130
- And the output should contain:
131
- """
132
- Array
133
- behaves like a collection object
134
- <<
135
- adds objects to the end of the collection
136
-
137
- Set
138
- behaves like a collection object
139
- <<
140
- adds objects to the end of the collection
141
- """
142
-
143
- Scenario: Passing parameters to a shared example group
144
- Given a file named "shared_example_group_params_spec.rb" with:
145
- """ruby
146
- shared_examples "a measurable object" do |measurement, measurement_methods|
147
- measurement_methods.each do |measurement_method|
148
- it "should return #{measurement} from ##{measurement_method}" do
149
- expect(subject.send(measurement_method)).to eq(measurement)
150
- end
151
- end
152
- end
153
-
154
- describe Array, "with 3 items" do
155
- subject { [1, 2, 3] }
156
- it_should_behave_like "a measurable object", 3, [:size, :length]
157
- end
158
-
159
- describe String, "of 6 characters" do
160
- subject { "FooBar" }
161
- it_should_behave_like "a measurable object", 6, [:size, :length]
162
- end
163
- """
164
- When I run `rspec shared_example_group_params_spec.rb --format documentation`
165
- Then the examples should all pass
166
- And the output should contain:
167
- """
168
- Array with 3 items
169
- it should behave like a measurable object
170
- should return 3 from #size
171
- should return 3 from #length
172
-
173
- String of 6 characters
174
- it should behave like a measurable object
175
- should return 6 from #size
176
- should return 6 from #length
177
- """
178
-
179
- Scenario: Aliasing "it_should_behave_like" to "it_has_behavior"
180
- Given a file named "shared_example_group_spec.rb" with:
181
- """ruby
182
- RSpec.configure do |c|
183
- c.alias_it_should_behave_like_to :it_has_behavior, 'has behavior:'
184
- end
185
-
186
- shared_examples 'sortability' do
187
- it 'responds to <=>' do
188
- expect(sortable).to respond_to(:<=>)
189
- end
190
- end
191
-
192
- describe String do
193
- it_has_behavior 'sortability' do
194
- let(:sortable) { 'sample string' }
195
- end
196
- end
197
- """
198
- When I run `rspec shared_example_group_spec.rb --format documentation`
199
- Then the examples should all pass
200
- And the output should contain:
201
- """
202
- String
203
- has behavior: sortability
204
- responds to <=>
205
- """
206
-
207
- Scenario: Sharing metadata automatically includes shared example groups
208
- Given a file named "shared_example_metadata_spec.rb" with:
209
- """ruby
210
- shared_examples "shared stuff", :a => :b do
211
- it 'runs wherever the metadata is shared' do
212
- end
213
- end
214
-
215
- describe String, :a => :b do
216
- end
217
- """
218
- When I run `rspec shared_example_metadata_spec.rb`
219
- Then the output should contain:
220
- """
221
- 1 example, 0 failures
222
- """
223
-
224
- Scenario: Shared examples are nestable by context
225
- Given a file named "context_specific_examples_spec.rb" with:
226
- """Ruby
227
- describe "shared examples" do
228
- context "per context" do
229
-
230
- shared_examples "shared examples are nestable" do
231
- specify { expect(true).to eq true }
232
- end
233
-
234
- it_behaves_like "shared examples are nestable"
235
- end
236
- end
237
- """
238
- When I run `rspec context_specific_examples_spec.rb`
239
- Then the output should contain:
240
- """
241
- 1 example, 0 failures
242
- """
243
-
244
- Scenario: Shared examples are accessible from offspring contexts
245
- Given a file named "context_specific_examples_spec.rb" with:
246
- """Ruby
247
- describe "shared examples" do
248
- shared_examples "shared examples are nestable" do
249
- specify { expect(true).to eq true }
250
- end
251
-
252
- context "per context" do
253
- it_behaves_like "shared examples are nestable"
254
- end
255
- end
256
- """
257
- When I run `rspec context_specific_examples_spec.rb`
258
- Then the output should contain:
259
- """
260
- 1 example, 0 failures
261
- """
262
- And the output should not contain:
263
- """
264
- Accessing shared_examples defined across contexts is deprecated
265
- """
266
-
267
- Scenario: Shared examples are isolated per context
268
- Given a file named "isolated_shared_examples_spec.rb" with:
269
- """Ruby
270
- describe "shared examples" do
271
- context do
272
- shared_examples "shared examples are isolated" do
273
- specify { expect(true).to eq true }
274
- end
275
- end
276
-
277
- context do
278
- it_behaves_like "shared examples are isolated"
279
- end
280
- end
281
- """
282
- When I run `rspec isolated_shared_examples_spec.rb`
283
- Then the output should contain:
284
- """
285
- Could not find shared examples \"shared examples are isolated\"
286
- """