From be0a541ab36428fe0c0dba74c15f18dd9cfd1b80 Mon Sep 17 00:00:00 2001 From: Xavier Shay Date: Sat, 5 Apr 2014 09:42:17 -0700 Subject: [PATCH 1/2] [core] Backport support for skip metadata. This commit was imported from https://github.com/rspec/rspec-core/commit/9228ffd3a2418e36888f7a73b6b86017f7a84793. --- rspec-core/Changelog.md | 2 ++ rspec-core/lib/rspec/core/example_group.rb | 2 ++ .../spec/rspec/core/example_group_spec.rb | 26 ++++++++++++++++--- 3 files changed, 26 insertions(+), 4 deletions(-) diff --git a/rspec-core/Changelog.md b/rspec-core/Changelog.md index 24440fd76..5e84f82ff 100644 --- a/rspec-core/Changelog.md +++ b/rspec-core/Changelog.md @@ -5,6 +5,8 @@ Enhancements: * Add `--deprecation-out` CLI option which directs deprecation warnings to the named file. (Myron Marston) +* Backport support for `skip` in metadata to skip execution of an example. + (Xavier Shay, #1472) Deprecations: diff --git a/rspec-core/lib/rspec/core/example_group.rb b/rspec-core/lib/rspec/core/example_group.rb index dce4c9695..ae62deb16 100644 --- a/rspec-core/lib/rspec/core/example_group.rb +++ b/rspec-core/lib/rspec/core/example_group.rb @@ -92,6 +92,8 @@ def self.#{name}(desc=nil, *args, &block) end options = build_metadata_hash_from(args) options.update(:pending => RSpec::Core::Pending::NOT_YET_IMPLEMENTED) unless block + # Backport from RSpec 3 to assist with upgrading + options.update(:pending => options[:skip]) if options[:skip] options.update(#{extra_options.inspect}) examples << RSpec::Core::Example.new(self, desc, options, block) examples.last diff --git a/rspec-core/spec/rspec/core/example_group_spec.rb b/rspec-core/spec/rspec/core/example_group_spec.rb index e72183ce4..05b0a3e99 100644 --- a/rspec-core/spec/rspec/core/example_group_spec.rb +++ b/rspec-core/spec/rspec/core/example_group_spec.rb @@ -752,19 +752,37 @@ def define_and_run_group(define_outer_example = false) end end + context 'skip in metadata' do + let(:group) { ExampleGroup.describe do + it 'is skipped', :skip => 'skip this' do + end + end + } + + before { group.run } + + it 'generates a pending example' do + expect(group.examples.first).to be_pending + end + + it 'sets the pending message' do + expect(group.examples.first.metadata[:execution_result][:pending_message]).to eq('skip this') + end + end + %w[pending skip].each do |method_name| describe ".#{method_name}" do let(:group) { ExampleGroup.describe.tap {|x| x.send(method_name, "is pending") { } }} + before { group.run } + it "generates a pending example" do - group.run expect(group.examples.first).to be_pending end it "sets the pending message" do - group.run expect(group.examples.first.metadata[:execution_result][:pending_message]).to eq(RSpec::Core::Pending::NO_REASON_GIVEN) end end @@ -776,13 +794,13 @@ def define_and_run_group(define_outer_example = false) x.send(method_name, "is pending") { } }} + before { group.run } + it "generates a pending example" do - group.run expect(group.examples.first).to be_pending end it "sets the pending message" do - group.run expect(group.examples.first.metadata[:execution_result][:pending_message]).to eq("Temporarily disabled with #{method_name}") end end From 235a4b3df68bab6c722412926f63c87920064a66 Mon Sep 17 00:00:00 2001 From: Xavier Shay Date: Sat, 5 Apr 2014 09:50:23 -0700 Subject: [PATCH 2/2] [core] skip with a block should not execute the block. This commit was imported from https://github.com/rspec/rspec-core/commit/305df5152f61a69af902c37d6c02dc42d49f2292. --- rspec-core/Changelog.md | 1 + rspec-core/lib/rspec/core/pending.rb | 6 +++++- rspec-core/spec/rspec/core/pending_example_spec.rb | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 1 deletion(-) diff --git a/rspec-core/Changelog.md b/rspec-core/Changelog.md index 5e84f82ff..df8bd75fc 100644 --- a/rspec-core/Changelog.md +++ b/rspec-core/Changelog.md @@ -62,6 +62,7 @@ Bug Fixes: * Issue a warning when you set `config.deprecation_stream` too late for it to take effect because the reporter has already been setup. (Myron Marston) +* `skip` with a block should not execute the block. (Xavier Shay, #1472) ### 2.99.0.beta2 / 2014-02-17 [full changelog](http://github.com/rspec/rspec-core/compare/v2.99.0.beta1...v2.99.0.beta2) diff --git a/rspec-core/lib/rspec/core/pending.rb b/rspec-core/lib/rspec/core/pending.rb index 053a89a83..390b8898e 100644 --- a/rspec-core/lib/rspec/core/pending.rb +++ b/rspec-core/lib/rspec/core/pending.rb @@ -137,7 +137,11 @@ def pending_no_warning(*args) end # Backport from RSpec 3 to aid in upgrading. - alias_method :skip, :pending_no_warning + # + # Not using alias method because we explictly want to discard any block. + def skip(*args) + pending_no_warning(*args) + end def self.const_missing(name) return super unless name == :PendingDeclaredInExample diff --git a/rspec-core/spec/rspec/core/pending_example_spec.rb b/rspec-core/spec/rspec/core/pending_example_spec.rb index f6b20be2b..4708d18fa 100644 --- a/rspec-core/spec/rspec/core/pending_example_spec.rb +++ b/rspec-core/spec/rspec/core/pending_example_spec.rb @@ -117,6 +117,20 @@ end end + context "skip with a block" do + it "does not execute the block" do + called = false + group = RSpec::Core::ExampleGroup.describe('group') do + it "does something" do + skip { called = true } + end + end + example = group.examples.first + example.run(group.new, double.as_null_object) + expect(called).to eq(false) + end + end + context "with a block" do def run_example(*pending_args, &block) group = RSpec::Core::ExampleGroup.describe('group') do