Указание rspec не загружать файлы - PullRequest
0 голосов
/ 08 июля 2010

Я пытаюсь добавить несколько хуков коммитов в мое git-репо. Я хочу использовать Rspec и создавать спецификации сообщений о коммите, которые будут запускаться каждый раз, когда я фиксирую. Я понял, как запустить rspec вне команды spec, но теперь у меня есть интересная проблема.

Вот мой текущий код:

.git / Крючки / фиксации-сообщ

#!/usr/bin/env ruby

require 'rubygems'
require 'spec/autorun'

message = File.read(ARGV[0])

describe "failing" do
    it "should fail" do
        true.should == false
    end
end

Выдает ошибку, когда доходит до вызова описания. По сути, он считает, что полученное сообщение о коммите - это файл для загрузки и запуска спецификаций. Вот собственно ошибка

./.git/COMMIT_EDITMSG:1: undefined local variable or method `commit-message-here' for main:Object (NameError)
from /Users/roykolak/.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:15:in `load'
from /Users/roykolak/.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:15:in `load_files'
from /Users/roykolak/.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:14:in `each'
from /Users/roykolak/.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/runner/example_group_runner.rb:14:in `load_files'
from /Users/roykolak/.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/runner/options.rb:133:in `run_examples'
from /Users/roykolak/.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/runner.rb:61:in `run'
from /Users/roykolak/.gem/ruby/1.8/gems/rspec-1.3.0/lib/spec/runner.rb:45:in `autorun'
from .git/hooks/commit-msg:12

Я ищу способ сообщить rspec, что файлы не загружаются. У меня есть подозрение, что мне нужно будет создать своего собственного специалиста по бегу. Я пришел к такому выводу после просмотра этих строк в rspec-1.3.0 / lib / spec / runner / example_group_runner.rb

  def load_files(files)
    $KCODE = 'u' if RUBY_VERSION.to_f < 1.9
    # It's important that loading files (or choosing not to) stays the
    # responsibility of the ExampleGroupRunner. Some implementations (like)
    # the one using DRb may choose *not* to load files, but instead tell
    # someone else to do it over the wire.
    files.each do |file|
      load file
    end
  end

Но я бы хотел получить отзыв, прежде чем я это сделаю. Есть мысли?

1 Ответ

0 голосов
/ 09 июля 2010

Вам даже действительно нужны все специальные материалы, которые предоставляет RSpec (should и различные сопоставители), только для проверки содержимого одного файла?Это действительно кажется излишним для этой проблемы.


spec/autorun в конечном итоге вызывает Spec::Runner.autorun, который анализирует ARGV, как если бы он содержал нормальные аргументы для spec командной строки.

Когда вы устанавливаете пустой «spec» -файл в качестве ловушки Git, он получит аргументы, подходящие для любого используемого Git-хука, а не spec стиль-аргументов (spec filenames /каталоги / шаблоны и spec опции).

Возможно, вам удастся решить эту проблему следующим образом:

# Save original ARGV, replace its elements with spec arguments
orig_argv = ARGV.dup
%w(--format nested).inject(ARGV.clear, :<<)

require 'rubygems'
require 'spec/autorun'

# rest of your code/spec
# NOTE: to refer to the Git hook arguments use orig_argv instead of ARGV 
...