rspec-core 3.0.0.beta2 → 3.0.0.rc1

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.
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,31 +0,0 @@
1
- Feature: Configurable colors
2
-
3
- RSpec allows you to configure the terminal colors used in the text formatters.
4
-
5
- * `failure_color`: Color used when tests fail (default: `:red`)
6
- * `success_color`: Color used when tests pass (default: `:green`)
7
- * `pending_color`: Color used when tests are pending (default: `:yellow`)
8
- * `fixed_color`: Color used when a pending block inside an example passes, but was expected to fail (default: `:blue`)
9
- * `detail_color`: Color used for miscellaneous test details (default: `:cyan`)
10
-
11
- Colors are normally specified as symbols. Options are `:black`, `:red`,
12
- `:green`, `:yellow`, `:blue`, `:magenta`, `:cyan`, and `:white`.
13
-
14
- @ansi
15
- Scenario: Customizing the failure color
16
- Given a file named "custom_failure_color_spec.rb" with:
17
- """ruby
18
- RSpec.configure do |config|
19
- config.failure_color = :magenta
20
- config.tty = true
21
- config.color = true
22
- end
23
-
24
- describe "failure" do
25
- it "fails and uses the custom color" do
26
- expect(2).to eq(4)
27
- end
28
- end
29
- """
30
- When I run `rspec custom_failure_color_spec.rb --format progress`
31
- Then the failing example is printed in magenta
@@ -1,68 +0,0 @@
1
- Feature: custom formatters
2
-
3
- RSpec ships with general purpose output formatters. You can tell RSpec which
4
- one to use using the [`--format` command line
5
- option]('../command_line/format_option').
6
-
7
- When RSpec's built-in output formatters don't, however, give you everything
8
- you need, you can write your own custom formatter and tell RSpec to use that
9
- one instead. The simplest way is to subclass RSpec's `BaseTextFormatter`,
10
- and then override just the methods that you want to modify.
11
-
12
- Scenario: custom formatter
13
- Given a file named "custom_formatter.rb" with:
14
- """ruby
15
- require "rspec/core/formatters/base_text_formatter"
16
-
17
- class CustomFormatter < RSpec::Core::Formatters::BaseTextFormatter
18
-
19
- # This registers the notifications this formatter supports, and tells
20
- # us that this was written against the RSpec 3.x formatter API.
21
- RSpec::Core::Formatters.register self, :example_started
22
-
23
- def initialize(output)
24
- super(output)
25
- end
26
-
27
- def example_started(notification)
28
- output << "example: " << notification.example.description
29
- end
30
- end
31
- """
32
- And a file named "example_spec.rb" with:
33
- """ruby
34
- describe "my group" do
35
- specify "my example" do
36
- end
37
- end
38
- """
39
- When I run `rspec example_spec.rb --require ./custom_formatter.rb --format CustomFormatter`
40
- Then the output should contain "example: my example"
41
- And the exit status should be 0
42
-
43
- Scenario: a legacy custom formatter
44
- Given a file named "custom_formatter.rb" with:
45
- """ruby
46
- require "rspec/core/formatters/base_text_formatter"
47
-
48
- class CustomFormatter < RSpec::Core::Formatters::BaseTextFormatter
49
- def initialize(output)
50
- super(output)
51
- end
52
-
53
- def example_started(proxy)
54
- output << "example: " << proxy.description
55
- end
56
- end
57
- """
58
- And a file named "example_spec.rb" with:
59
- """ruby
60
- describe "my group" do
61
- specify "my example" do
62
- end
63
- end
64
- """
65
- When I run `rspec example_spec.rb --require ./custom_formatter.rb --format CustomFormatter`
66
- Then the output should contain "example: my example"
67
- And the output should contain "The CustomFormatter formatter uses the deprecated formatter interface."
68
- And the exit status should be 0
@@ -1,30 +0,0 @@
1
- Feature: JSON formatter
2
-
3
- Scenario: Formatting example names for retry
4
- Given a file named "various_spec.rb" with:
5
- """ruby
6
- describe "Various" do
7
- it "fails" do
8
- expect("fail").to eq("succeed")
9
- end
10
-
11
- it "succeeds" do
12
- expect("succeed").to eq("succeed")
13
- end
14
-
15
- it "pends"
16
- end
17
- """
18
- When I run `rspec various_spec.rb --format j`
19
- Then the output should contain all of these:
20
- |"summary_line":"3 examples, 1 failure, 1 pending"|
21
- |"examples":[ |
22
- |"description":"fails" |
23
- |"full_description":"Various fails" |
24
- |"status":"failed" |
25
- |"file_path":"./various_spec.rb" |
26
- |"line_number":2 |
27
- |"exception":{ |
28
- |"class":"RSpec::Expectations::ExpectationNotMetError"|
29
-
30
- And the exit status should be 1
@@ -1,95 +0,0 @@
1
- Feature: Regression tests for legacy custom formatters
2
-
3
- Background:
4
- Given a file named ".rspec" with:
5
- """
6
- --require spec_helper
7
- """
8
- And a file named "spec/spec_helper.rb" with:
9
- """
10
- RSpec.configure do |rspec|
11
- rspec.after(:suite) do
12
- puts rspec.formatters.map(&:class).inspect
13
- end
14
- end
15
- """
16
- And a file named "spec/passing_and_failing_spec.rb" with:
17
- """ruby
18
- RSpec.describe "Some examples" do
19
- it "passes" do
20
- expect(1).to eq(1)
21
- end
22
-
23
- it "fails" do
24
- expect(1).to eq(2)
25
- end
26
-
27
- context "nested" do
28
- it "passes" do
29
- expect(1).to eq(1)
30
- end
31
-
32
- it "fails" do
33
- expect(1).to eq(2)
34
- end
35
- end
36
- end
37
- """
38
- And a file named "spec/pending_spec.rb" with:
39
- """ruby
40
- RSpec.describe "Some pending examples" do
41
- context "pending" do
42
- it "is reported as pending" do
43
- pending; expect(1).to eq(2)
44
- end
45
-
46
- it "is reported as failing" do
47
- pending; expect(1).to eq(1)
48
- end
49
- end
50
- end
51
- """
52
-
53
- Scenario: Use fuubar formatter
54
- When I run `rspec --format Fuubar`
55
- Then the output should contain "Progress: |============"
56
- And the output should contain "6 examples, 3 failures, 1 pending"
57
- And the output should contain "The Fuubar formatter uses the deprecated formatter interface"
58
- But the output should not contain any error backtraces
59
- And the output should not contain "ProgressFormatter"
60
-
61
- Scenario: Use rspec-instafail formatter
62
- When I run `rspec --format RSpec::Instafail`
63
- Then the output should contain "6 examples, 3 failures, 1 pending"
64
- And the output should contain "The RSpec::Instafail formatter uses the deprecated formatter interface"
65
- But the output should not contain any error backtraces
66
- And the output should not contain "ProgressFormatter"
67
-
68
- Scenario: Use rspec-extra-formatters JUnit formatter
69
- When I run `rspec --require rspec-extra-formatters --format JUnitFormatter`
70
- Then the output should contain:
71
- """
72
- <testsuite errors="0" failures="3" skipped="1" tests="6"
73
- """
74
- And the output should contain "The JUnitFormatter formatter uses the deprecated formatter interface"
75
- But the output should not contain any error backtraces
76
- And the output should not contain "ProgressFormatter"
77
-
78
- @wip @announce
79
- Scenario: Use rspec-extra-formatters Tap formatter
80
- When I run `rspec --require rspec-extra-formatters --format TapFormatter`
81
- Then the output should contain "TAP version 13"
82
- And the output should contain "The TapFormatter formatter uses the deprecated formatter interface"
83
- But the output should not contain any error backtraces
84
- And the output should not contain "ProgressFormatter"
85
-
86
- @wip @announce
87
- Scenario: Use rspec-spinner formatter
88
- When I run `rspec --require rspec_spinner --format RspecSpinner::Spinner`
89
- Then the output should contain "TBD"
90
-
91
- @wip @announce
92
- Scenario: Use nyancat formatter
93
- When I run `rspec --format NyanCatFormatter`
94
- Then the output should contain "TBD"
95
-
@@ -1,46 +0,0 @@
1
- Feature: text formatter
2
-
3
- In order to easily see the result of running my specs
4
- As an RSpec user
5
- I want clear, concise, well-formatted output
6
-
7
- Scenario: Backtrace formatting for failing specs in multiple files
8
- Given a file named "string_spec.rb" with:
9
- """ruby
10
- describe String do
11
- it "has a failing example" do
12
- expect("foo".reverse).to eq("ofo")
13
- end
14
- end
15
- """
16
- And a file named "integer_spec.rb" with:
17
- """ruby
18
- describe Integer do
19
- it "has a failing example" do
20
- expect(7 + 5).to eq(11)
21
- end
22
- end
23
- """
24
- When I run `rspec integer_spec.rb string_spec.rb`
25
- Then the backtrace-normalized output should contain:
26
- """
27
- 1) Integer has a failing example
28
- Failure/Error: expect(7 + 5).to eq(11)
29
-
30
- expected: 11
31
- got: 12
32
-
33
- (compared using ==)
34
- # ./integer_spec.rb:3
35
- """
36
- And the backtrace-normalized output should contain:
37
- """
38
- 2) String has a failing example
39
- Failure/Error: expect("foo".reverse).to eq("ofo")
40
-
41
- expected: "ofo"
42
- got: "oof"
43
-
44
- (compared using ==)
45
- # ./string_spec.rb:3
46
- """
@@ -1,40 +0,0 @@
1
- Feature: arbitrary helper methods
2
-
3
- You can define methods in any example group using Ruby's `def` keyword or
4
- `define_method` method. These _helper_ methods are exposed to examples in the
5
- group in which they are defined and groups nested within that group, but not
6
- parent or sibling groups.
7
-
8
- Scenario: use a method defined in the same group
9
- Given a file named "example_spec.rb" with:
10
- """ruby
11
- describe "an example" do
12
- def help
13
- :available
14
- end
15
-
16
- it "has access to methods defined in its group" do
17
- expect(help).to be(:available)
18
- end
19
- end
20
- """
21
- When I run `rspec example_spec.rb`
22
- Then the examples should all pass
23
-
24
- Scenario: use a method defined in a parent group
25
- Given a file named "example_spec.rb" with:
26
- """ruby
27
- describe "an example" do
28
- def help
29
- :available
30
- end
31
-
32
- describe "in a nested group" do
33
- it "has access to methods defined in its parent group" do
34
- expect(help).to be(:available)
35
- end
36
- end
37
- end
38
- """
39
- When I run `rspec example_spec.rb`
40
- Then the examples should all pass
@@ -1,50 +0,0 @@
1
- Feature: let and let!
2
-
3
- Use `let` to define a memoized helper method. The value will be cached
4
- across multiple calls in the same example but not across examples.
5
-
6
- Note that `let` is lazy-evaluated: it is not evaluated until the first time
7
- the method it defines is invoked. You can use `let!` to force the method's
8
- invocation before each example.
9
-
10
- Scenario: use let to define memoized helper method
11
- Given a file named "let_spec.rb" with:
12
- """ruby
13
- $count = 0
14
- describe "let" do
15
- let(:count) { $count += 1 }
16
-
17
- it "memoizes the value" do
18
- expect(count).to eq(1)
19
- expect(count).to eq(1)
20
- end
21
-
22
- it "is not cached across examples" do
23
- expect(count).to eq(2)
24
- end
25
- end
26
- """
27
- When I run `rspec let_spec.rb`
28
- Then the examples should all pass
29
-
30
- Scenario: use let! to define a memoized helper method that is called in a before hook
31
- Given a file named "let_bang_spec.rb" with:
32
- """ruby
33
- $count = 0
34
- describe "let!" do
35
- invocation_order = []
36
-
37
- let!(:count) do
38
- invocation_order << :let!
39
- $count += 1
40
- end
41
-
42
- it "calls the helper method in a before hook" do
43
- invocation_order << :example
44
- expect(invocation_order).to eq([:let!, :example])
45
- expect(count).to eq(1)
46
- end
47
- end
48
- """
49
- When I run `rspec let_bang_spec.rb`
50
- Then the examples should all pass
@@ -1,146 +0,0 @@
1
- Feature: Define helper methods in a module
2
-
3
- You can define helper methods in a module and include it in
4
- your example groups using the `config.include` configuration
5
- option. `config.extend` can be used to extend the module onto
6
- your example groups so that the methods in the module are available
7
- in the example groups themselves (but not in the actual examples).
8
-
9
- You can also include or extend the module onto only certain example
10
- groups by passing a metadata hash as the last argument. Only groups
11
- that match the given metadata will include or extend the module. You
12
- can also specify metadata using only symbols.
13
-
14
- Background:
15
- Given a file named "helpers.rb" with:
16
- """ruby
17
- module Helpers
18
- def help
19
- :available
20
- end
21
- end
22
- """
23
-
24
- Scenario: include a module in all example groups
25
- Given a file named "include_module_spec.rb" with:
26
- """ruby
27
- require './helpers'
28
-
29
- RSpec.configure do |c|
30
- c.include Helpers
31
- end
32
-
33
- describe "an example group" do
34
- it "has access to the helper methods defined in the module" do
35
- expect(help).to be(:available)
36
- end
37
- end
38
- """
39
- When I run `rspec include_module_spec.rb`
40
- Then the examples should all pass
41
-
42
- Scenario: extend a module in all example groups
43
- Given a file named "extend_module_spec.rb" with:
44
- """ruby
45
- require './helpers'
46
-
47
- RSpec.configure do |c|
48
- c.extend Helpers
49
- end
50
-
51
- describe "an example group" do
52
- puts "Help is #{help}"
53
-
54
- it "does not have access to the helper methods defined in the module" do
55
- expect { help }.to raise_error(NameError)
56
- end
57
- end
58
- """
59
- When I run `rspec extend_module_spec.rb`
60
- Then the examples should all pass
61
- And the output should contain "Help is available"
62
-
63
- Scenario: include a module in only some example groups
64
- Given a file named "include_module_in_some_groups_spec.rb" with:
65
- """ruby
66
- require './helpers'
67
-
68
- RSpec.configure do |c|
69
- c.include Helpers, :foo => :bar
70
- end
71
-
72
- describe "an example group with matching metadata", :foo => :bar do
73
- it "has access to the helper methods defined in the module" do
74
- expect(help).to be(:available)
75
- end
76
- end
77
-
78
- describe "an example group without matching metadata" do
79
- it "does not have access to the helper methods defined in the module" do
80
- expect { help }.to raise_error(NameError)
81
- end
82
- end
83
- """
84
- When I run `rspec include_module_in_some_groups_spec.rb`
85
- Then the examples should all pass
86
-
87
- Scenario: extend a module in only some example groups
88
- Given a file named "extend_module_in_only_some_groups_spec.rb" with:
89
- """ruby
90
- require './helpers'
91
-
92
- RSpec.configure do |c|
93
- c.extend Helpers, :foo => :bar
94
- end
95
-
96
- describe "an example group with matching metadata", :foo => :bar do
97
- puts "In a matching group, help is #{help}"
98
-
99
- it "does not have access to the helper methods defined in the module" do
100
- expect { help }.to raise_error(NameError)
101
- end
102
- end
103
-
104
- describe "an example group without matching metadata" do
105
- puts "In a non-matching group, help is #{help rescue 'not available'}"
106
-
107
- it "does not have access to the helper methods defined in the module" do
108
- expect { help }.to raise_error(NameError)
109
- end
110
- end
111
- """
112
- When I run `rspec extend_module_in_only_some_groups_spec.rb`
113
- Then the examples should all pass
114
- And the output should contain "In a matching group, help is available"
115
- And the output should contain "In a non-matching group, help is not available"
116
-
117
- Scenario: use symbols as metadata
118
- Given a file named "symbols_as_metadata_spec.rb" with:
119
- """ruby
120
- require './helpers'
121
-
122
- RSpec.configure do |c|
123
- c.include Helpers, :include_helpers
124
- c.extend Helpers, :extend_helpers
125
- end
126
-
127
- describe "an example group with matching include metadata", :include_helpers do
128
- puts "In a group not matching the extend filter, help is #{help rescue 'not available'}"
129
-
130
- it "has access to the helper methods defined in the module" do
131
- expect(help).to be(:available)
132
- end
133
- end
134
-
135
- describe "an example group with matching extend metadata", :extend_helpers do
136
- puts "In a group matching the extend filter, help is #{help}"
137
-
138
- it "does not have access to the helper methods defined in the module" do
139
- expect { help }.to raise_error(NameError)
140
- end
141
- end
142
- """
143
- When I run `rspec symbols_as_metadata_spec.rb`
144
- Then the examples should all pass
145
- And the output should contain "In a group not matching the extend filter, help is not available"
146
- And the output should contain "In a group matching the extend filter, help is available"