2016-05-24 4 views
3

Ich versuche, einen Git Pre-Commit Hook zu schreiben, der den Benutzer nicht festschreiben lassen würde, wenn es ein Beispiel gibt, das mit :focus getaggt ist.Wie man RSpec-Beispiele zählt, die gefiltert wurden mit: focus in einem Git-Hook?

Mit RSpec-API (okay, auch wenn es privat ist), gibt es eine Möglichkeit, die Anzahl der Beispiele mit dem Filter :focus herauszufinden?

Ich fand die example_count-instance_method. Es könnte nützlich sein, aber ich bin nicht sicher, wie es von einem externen Skript aufgerufen werden kann.

Antwort

3

Here is ein Overcommit pre_commit Haken, die RSpecs private API, um herauszufinden, Spezifikationen mit :focus Filter verwendet:

require 'rspec' 

module Overcommit 
    module Hook 
    module PreCommit 
     # NOTE: This makes use of many methods from RSpecs private API. 
     class EnsureFocusFreeSpecs < Base 
     def configure_rspec(applicable_files) 
      RSpec.configure do |config| 
      config.inclusion_filter = :focus 
      config.files_or_directories_to_run = applicable_files 
      config.inclusion_filter.rules 
      config.requires = %w(spec_helper rails_helper) 
      config.load_spec_files 
      end 
     end 

     def run 
      configure_rspec(applicable_files) 

      return :pass if RSpec.world.example_count.zero? 

      files = RSpec.world.filtered_examples.reject {|_k, v| v.empty?}.keys.map(&:file_path).uniq 
      [:fail, "Trying to commit focused spec(s) in:\n\t#{files.join("\n\t")}"] 
     end 
     end 
    end 
    end 
end 
1

Anstatt RSpec Ruby-Code aufzurufen, würde ich es über die RSpec-Befehlszeilenschnittstelle mit dem --dry-run Flag machen. Hier ist ein Haken pre-commit, dass es auf diese Weise tut:

#!/bin/bash 
if ! (rspec --dry-run --no-color -t focus:true 2>&1 | grep -q '0 examples'); then 
    echo "Please do not commit RSpec examples tagged with :focus." 
    exit 1 
fi 
+0

ich es schon hatte diese Art und Weise zu arbeiten. Aber wenn möglich, dachte ich über einen reinen Ruby-Ansatz nach, da ich [OverCommit] verwendet habe (https://github.com/brigade/overcommit). – hallucinations

1

nicht ganz sicher, ob dies helfen wird, oder die Frage zu beantworten, aber ich verwende derzeit this set of githooks um sicherzustellen, dass ich nicht offensichtliche Fehler begehen, und diese pull request Fügt eine Überprüfung für :focus/focus: true/:focus => true in RSpec-Dateien hinzu.

+0

Ich dachte, es wäre besser, wenn RSpec die Filter kennt. Dies wird uns helfen, Probleme wie das Hinzufügen eines ': focus' in einem Code-Kommentar zu lösen, der den Git-Hook nicht besteht. – hallucinations

+1

BTW, Sie könnten auch ': focus => true' in Ihrem Commit-Hook berücksichtigen. – hallucinations

+0

@hallucinations, nice pick up: Ich habe horhrocks komplett vergessen. Fest. –

Verwandte Themen