Best Spinach_ruby code snippet using Spinach.scenarios
feature_runner_test.rb
Source:feature_runner_test.rb
2describe Spinach::Runner::FeatureRunner do3 let(:feature) do4 stub('feature',5 name: 'Feature',6 scenarios: [],7 background_steps: []8 )9 end10 subject { Spinach::Runner::FeatureRunner.new(feature) }11 describe '#initialize' do12 it 'initializes the given filename' do13 subject.feature.must_equal feature14 end15 end16 describe '#scenarios' do17 it 'delegates to the feature' do18 subject.feature.stubs(scenarios: [1,2,3])19 subject.scenarios.must_equal [1,2,3]20 end21 end22 describe '#run' do23 describe "when some steps don't exist" do24 it 'runs the hooks in order' do25 hooks = sequence('hooks')26 Spinach.hooks.expects(:run_before_feature).with(feature).in_sequence(hooks)27 Spinach.expects(:find_step_definitions).returns(false).in_sequence(hooks)28 Spinach.hooks.expects(:run_after_feature).with(feature).in_sequence(hooks)29 subject.run30 end31 end32 describe 'when all the steps exist' do33 before do34 @scenarios = [35 scenario = stub(tags: []),36 another_scenario = stub(tags: [])37 ]38 @feature = stub('feature',39 name: "Feature",40 tags: [],41 scenarios: @scenarios,42 run_every_scenario?: true43 )44 Spinach.stubs(:find_step_definitions).returns(true)45 @runner = Spinach::Runner::FeatureRunner.new(@feature)46 end47 describe 'and the scenarios pass' do48 it 'runs the scenarios and returns true' do49 @scenarios.each do |scenario|50 runner = stub(run: true)51 Spinach::Runner::ScenarioRunner.expects(:new).with(scenario).returns runner52 end53 @runner.run.must_equal true54 end55 end56 describe 'and the scenarios fail' do57 describe "without config option fail_fast set" do58 it 'runs the scenarios and returns false' do59 @scenarios.each do |scenario|60 runner = stub(run: false)61 Spinach::Runner::ScenarioRunner.expects(:new).with(scenario).returns runner62 end63 @runner.run.must_equal false64 end65 end66 describe "with config option fail_fast set" do67 let(:runners) { [ stub('runner1', run: false), stub('runner2') ] }68 before(:each) do69 Spinach.config.stubs(:fail_fast).returns(true)70 @scenarios.each_with_index do |scenario, i|71 Spinach::Runner::ScenarioRunner.stubs(:new).with(scenario).returns runners[i]72 end73 end74 it "breaks with fail_fast config option" do75 runners[1].expects(:run).never76 @runner.run.must_equal(false)77 end78 end79 end80 end81 describe "when the steps don't exist" do82 it 'runs the corresponding hooks and returns false' do83 Spinach.stubs(:find_step_definitions).returns(false)84 Spinach.hooks.expects(:run_on_undefined_feature).with(feature)85 subject.run.must_equal false86 end87 end88 describe "when only running specific lines" do89 before do90 @scenarios = [91 stub(tags: [], lines: (4..8).to_a),92 stub(tags: [], lines: (12..15).to_a),93 ]94 @feature = stub('feature',95 name: 'Feature',96 tags: [],97 scenarios: @scenarios,98 run_every_scenario?: false,99 )100 Spinach.stubs(:find_step_definitions).returns(true)101 end102 it "runs exactly matching scenario" do103 Spinach::Runner::ScenarioRunner.expects(:new).with(@scenarios[1]).returns stub(run: true)104 @feature.stubs(:lines_to_run).returns([12])105 @runner = Spinach::Runner::FeatureRunner.new(@feature)106 @runner.run107 end108 it "runs no scenario and returns false" do109 Spinach::Runner::ScenarioRunner.expects(:new).never110 @feature.stubs(:lines_to_run).returns([3])111 @runner = Spinach::Runner::FeatureRunner.new(@feature)112 @runner.run113 end114 it "runs matching scenario" do115 Spinach::Runner::ScenarioRunner.expects(:new).with(@scenarios[0]).returns stub(run: true)116 @feature.stubs(:lines_to_run).returns([8])117 @runner = Spinach::Runner::FeatureRunner.new(@feature)118 @runner.run119 end120 it "runs last scenario" do121 Spinach::Runner::ScenarioRunner.expects(:new).with(@scenarios[1]).returns stub(run: true)122 @feature.stubs(:lines_to_run).returns([15])123 @runner = Spinach::Runner::FeatureRunner.new(@feature)124 @runner.run125 end126 end127 describe "when running for specific tags configured" do128 describe "with feature" do129 before do130 @scenario = stub(tags: [])131 @feature = stub('feature',132 name: 'Feature',133 tags: ["feature_tag"],134 scenarios: [@scenario],135 run_every_scenario?: true,136 )137 Spinach.stubs(:find_step_definitions).returns(true)138 end139 it "runs matching feature" do140 Spinach::TagsMatcher.expects(:match).with(["feature_tag"]).returns true141 Spinach::Runner::ScenarioRunner.expects(:new).with(@scenario).returns stub(run: true)142 @runner = Spinach::Runner::FeatureRunner.new(@feature)143 @runner.run144 end145 end146 describe "with scenario" do147 before do148 @scenario = stub(tags: ["scenario_tag"])149 @feature = stub('feature',150 name: 'Feature',151 tags: ["feature_tag"],152 scenarios: [@scenario],153 run_every_scenario?: true,154 )155 Spinach.stubs(:find_step_definitions).returns(true)156 end157 it "runs matching scenario" do158 Spinach::TagsMatcher.expects(:match).with(["feature_tag", "scenario_tag"]).returns true159 Spinach::Runner::ScenarioRunner.expects(:new).with(@scenario).returns stub(run: true)160 @runner = Spinach::Runner::FeatureRunner.new(@feature)161 @runner.run162 end163 it "skips scenarios that do not match" do164 Spinach::TagsMatcher.expects(:match).with(["feature_tag", "scenario_tag"]).returns false165 Spinach::Runner::ScenarioRunner.expects(:new).never166 @runner = Spinach::Runner::FeatureRunner.new(@feature)167 @runner.run168 end169 it "doesn't accumulate tags from one scenario to the next" do170 next_scenario = stub(tags: [])171 @feature.stubs(:scenarios).returns [@scenario, next_scenario]172 Spinach::TagsMatcher.expects(:match).with(["feature_tag", "scenario_tag"]).returns true173 Spinach::TagsMatcher.expects(:match).with(["feature_tag"]).returns false174 Spinach::Runner::ScenarioRunner.expects(:new).with(@scenario).returns stub(run: true)175 @runner = Spinach::Runner::FeatureRunner.new(@feature)176 @runner.run177 end178 end179 end180 end181end...
feature_runner.rb
Source:feature_runner.rb
...21 def feature_name22 feature.name23 end24 # @return [Array<GherkinRuby::AST::Scenario>]25 # The parsed scenarios for this runner's feature.26 #27 # @api public28 def scenarios29 feature.scenarios30 end31 # Runs this feature.32 #33 # @return [true, false]34 # Whether the run was successful or not.35 #36 # @api public37 def run38 Spinach.hooks.run_before_feature(feature)39 if Spinach.find_step_definitions(feature_name)40 run_scenarios!41 else42 undefined_steps!43 end44 Spinach.hooks.run_after_feature(feature)45 # FIXME The feature & scenario runners should have the same structure.46 # They should either both return inverted failure or both return47 # raw success.48 !@failed49 end50 private51 def feature_tags52 if feature.respond_to?(:tags)53 feature.tags54 else55 []56 end57 end58 def run_scenarios!59 scenarios_to_run.each do |scenario|60 success = ScenarioRunner.new(scenario).run61 @failed = true unless success62 break if Spinach.config.fail_fast && @failed63 end64 end65 def undefined_steps!66 Spinach.hooks.run_on_undefined_feature(feature)67 @failed = true68 end69 def scenarios_to_run70 unordered_scenarios = feature.scenarios.select do |scenario|71 has_a_tag_that_will_be_run = TagsMatcher.match(feature_tags + scenario.tags)72 on_a_line_that_will_be_run = if feature.run_every_scenario?73 true74 else75 (scenario.lines & feature.lines_to_run).any?76 end77 has_a_tag_that_will_be_run && on_a_line_that_will_be_run78 end79 orderer.order(unordered_scenarios)80 end81 end82 end83end...
spinach.rb
Source:spinach.rb
...10 # Clear sidekiq worker jobs11 Sidekiq::Worker.clear_all12 end13 Spinach.hooks.before_run do14 # Creating a hash of all feature names (keys) and corresponding list of scenarios (values) that need to be SKIPPED15 # All scenarios in parent application that need to be skipped should be marked with a '@skip-parent' tag16 # in the rails engine, for a dummy scenario with the same name & feature location as the parent17 skipped_scenarios = {}18 Dir["#{Rails.root}/perforce_swarm/features/**/*.feature"].each do |engine_file|19 app_file = engine_file.gsub(%r{/perforce_swarm}, '')20 next unless File.exist?(app_file)21 feature_name = `grep 'Feature:' #{engine_file} |sed 's/Feature: *//g'`.strip22 local_skipped_scenarios = `grep -C 1 '@skip-parent' #{engine_file} |grep 'Scenario:'|sed 's/Scenario: *//g'`23 .split("\n")24 .each { |a| a.strip! if a.respond_to? :strip! }25 if local_skipped_scenarios.any?26 skipped_scenarios[feature_name] = local_skipped_scenarios27 end28 end29 # Modifying the Spinach 'Features' object so that it skips the list of scenarios specified by 'skipped_scenarios'30 Spinach.hooks.before_feature do |feature|31 if skipped_scenarios.key?(feature.name)32 feature.scenarios.select! do |scenario|33 !skipped_scenarios[feature.name].include?(scenario.name)34 end35 end36 end37 # Add overridden steps from the engine to the parent application's path38 Dir.glob(39 File.expand_path(File.join(Rails.root, 'perforce_swarm', 'features', 'steps', '**', '*.rb'))40 ).sort { |a, b| [b.count(File::SEPARATOR), a] <=> [a.count(File::SEPARATOR), b] }.each do |file|41 require file42 end43 end44 def wait_for_requests45 RackRequestBlocker.block_requests!46 Timeout.timeout(Capybara.default_max_wait_time * RackRequestBlocker.num_active_requests) do47 loop { break if RackRequestBlocker.num_active_requests == 0 }...
scenarios
Using AI Code Generation
1Spinach.hooks.on_tag('tag_name') do |scenario|2Spinach.hooks.on_feature('feature_name') do |scenario|3Spinach.hooks.on_scenario('scenario_name') do |scenario|4Spinach.hooks.on_outline('outline_name') do |scenario|5Spinach.hooks.on_step('step_name') do |scenario|
scenarios
Using AI Code Generation
1Spinach.hooks.on_tag('scenario') do |scenario|2Spinach.hooks.on_tag('step') do |step|3Spinach.hooks.on_tag('feature') do |feature|4Spinach.hooks.on_tag('outline') do |outline|5Spinach.hooks.on_tag('background') do |background|6Spinach.hooks.on_tag('scenario_outline') do |scenario_outline|7Spinach.hooks.on_tag('feature_outline') do |feature_outline|8Spinach.hooks.on_tag('scenario_background') do |scenario_background|9Spinach.hooks.on_tag('feature_background') do |feature_background|10Spinach.hooks.on_tag('outline_background') do |outline_background|11Spinach.hooks.on_tag('scenario_outline_background') do |scenario_outline_background|12Spinach.hooks.on_tag('feature_outline_background') do |feature_outline_background|13Spinach.hooks.on_tag('feature_scenario') do |feature_scenario|14Spinach.hooks.on_tag('feature_scenario_outline') do |feature_scenario_outline|15Spinach.hooks.on_tag('feature_outline_scenario') do |feature_outline_scenario|16Spinach.hooks.on_tag('feature_outline_scenario_outline') do |feature_outline_scenario_outline|17Spinach.hooks.on_tag('outline_scenario') do |outline_scenario|18Spinach.hooks.on_tag('outline_scenario_outline') do |outline_scenario_outline|
scenarios
Using AI Code Generation
1Spinach.hooks.on_tag('scenario') do |scenario|2Spinach.hooks.on_tag('step') do |step|3Spinach.hooks.on_tag('scenario') do |scenario|4Spinach.hooks.on_tag('step') do |step|5Spinach.hooks.on_tag('scenario') do |scenario|6Spinach.hooks.on_tag('step') do |step|7Spinach.hooks.on_tag('scenario') do |scenario|8Spinach.hooks.on_tag('step') do |step|9Spinach.hooks.on_tag('scenario') do |scenario|10Spinach.hooks.on_tag('step') do |step|11Spinach.hooks.on_tag('scenario') do |scenario|12Spinach.hooks.on_tag('step') do |step|13Spinach.hooks.on_tag('scenario') do |scenario|14Spinach.hooks.on_tag('step') do |step|15Spinach.hooks.on_tag('scenario') do |scenario|16Spinach.hooks.on_tag('step') do |step|17Spinach.hooks.on_tag('scenario') do |scenario|18Spinach.hooks.on_tag('step') do |step|19Spinach.hooks.on_tag('scenario') do |scenario|20Spinach.hooks.on_tag('step') do |step|21Spinach.hooks.on_tag('scenario') do |scenario|
scenarios
Using AI Code Generation
1Spinach.hooks.on_tag('scenario') do |scenario|2Spinach.hooks.on_tag('step') do |step|3Spinach.hooks.on_tag('scenario') do |scenario|4Spinach.hooks.on_tag('step') do |step|5Spinach.hooks.on_tag('scenario') do |scenario|6Spinach.hooks.on_tag('step') do |step|7Spinach.hooks.on_tag('scenario') do |scenario|8Spinach.hooks.on_tag('step') do |step|9Spinach.hooks.on_tag('scenario') do |scenario|10Spinach.hooks.on_tag('step') do |step|11Spinach.hooks.on_tag('scenario') do |scenario|12Spinach.hooks.on_tag('step') do |step|13Spinach.hooks.on_tag('scenario') do |scenario|14Spinach.hooks.on_tag('step') do |step|15Spinach.hooks.on_tag('scenario') do |scenario|16Spinach.hooks.on_tag('step') do |step|17Spinach.hooks.on_tag('scenario') do |scenario|18Spinach.hooks.on_tag('step') do |step|19Spinach.hooks.on_tag('scenario') do |scenario|20Spinach.hooks.on_tag('step') do |step|21Spinach.hooks.on_tag('scenario') do |scenario|
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!