# Generated from unstoppable-0.1.0.gem by gem2rpm -*- rpm-spec -*- %global gem_name unstoppable Name: rubygem-%{gem_name} Version: 0.1.0 Release: 1%{?dist} Summary: Cucumber extension that ensures all tests run to completion, catching failures and errors along the way and reporting them at completion License: MIT URL: https://rubygems.org/gems/unstoppable Source0: https://rubygems.org/gems/%{gem_name}-%{version}.gem BuildRequires: ruby(release) BuildRequires: rubygems-devel BuildRequires: ruby # BuildRequires: rubygem(rspec) >= 2.4 # BuildRequires: rubygem(rspec) < 3 # BuildRequires: rubygem(rubygems-tasks) >= 0.2 # BuildRequires: rubygem(rubygems-tasks) < 1 # BuildRequires: rubygem(yard) >= 0.8 # BuildRequires: rubygem(yard) < 1 BuildArch: noarch %description Problem: While Cucumber is an awesome tool, for some kinds of tests it's default behaviour becomes an obstacle. Testing large batches of input against a slow error prone system is the source of much frustration. Cucumber will skip remaining steps on failure or error. This is especially problematic if the test input is a dynamic collection, *(e.g. results of a database query). This is opposed to a static collection testing which is solved by a Scenario Outline. Solution: We need to step putside Cucumber's default pass/fail/error handling. Capture all failures and errors in collections. Log errors and failures. Generate a pass/fail manifest against the test inputs. Do not use this for normal BDD style testing, Cucumber's default behaviour is perfect for that. Public Interface: This is a works in progress so I expect changes as usage reveals more. In your cucumber env.rb Before do |scenario| setup_unstoppable end After do |scenario| print unstoppable_failures(scenario) print unstoppable_errors(scenario) end In a step definition wrap any operation that you do not wish to stop execution like so unstoppable do expect(thing).to be(exected_thing) end This helper method does the following: runs executes the block catches any exception 2a. adds error to errors collection if an error 2b. adds expectation failure to failures collection if error is an RSpec::Expectations::ExpectationNotMetError logs error/failure. %package doc Summary: Documentation for %{name} Requires: %{name} = %{version}-%{release} BuildArch: noarch %description doc Documentation for %{name}. %prep %setup -q -n %{gem_name}-%{version} %build # Create the gem as gem install only works on a gem file gem build ../%{gem_name}-%{version}.gemspec # %%gem_install compiles any C extensions and installs the gem into ./%%gem_dir # by default, so that we can move it into the buildroot in %%install %gem_install %install mkdir -p %{buildroot}%{gem_dir} cp -a .%{gem_dir}/* \ %{buildroot}%{gem_dir}/ %check pushd .%{gem_instdir} # rspec spec popd %files %dir %{gem_instdir} %exclude %{gem_instdir}/.gitignore %exclude %{gem_instdir}/.yardopts %license %{gem_instdir}/LICENSE %license %{gem_instdir}/LICENSE.txt %{gem_libdir} %exclude %{gem_cache} %{gem_spec} %files doc %doc %{gem_docdir} %doc %{gem_instdir}/.document %exclude %{gem_instdir}/.rspec %doc %{gem_instdir}/ChangeLog.md %{gem_instdir}/Gemfile %{gem_instdir}/Gemfile.lock %doc %{gem_instdir}/README.md %{gem_instdir}/Rakefile %{gem_instdir}/spec %{gem_instdir}/unstoppable.gemspec %changelog * Thu Sep 16 2021 mockbuilder - 0.1.0-1 - Initial package