2016-03-27 5 views
2

Der rspec Befehl wird mit mehreren Optionen können Sie RSpec Verhalten verwenden, um anzupassen, Ausgabeformate, einschließlich Filtern Beispiele usw.Pass Befehlszeilenargumente zu RSpec RakeTask dynamisch

Zum Beispiel:

$ rspec path/to/spec_file.rb 
$ rspec --example 'first example' 
$ rspec --tag type:special 
$ rspec -P "**/*_test.rb" 

Wie kann ich das gleiche tun mit rake spec (mit voll Rspec Optionen).
Mein Rakefile:

require 'bundler/gem_tasks' 
require 'rspec/core/rake_task' 

task default: :spec 

RSpec::Core::RakeTask.new(:spec) 

Ich habe Google gewesen, aber keine vollständige Antwort darauf gefunden. Vielen Dank.

Antwort

1

Befehlszeilenargumente können automatisch an den Hash-Wert ENV übergeben werden.

Zum Beispiel:

  • von der Kommandozeile: FOO=BAR rspec spec/*spec.rb
  • Innen RSpec: puts ENV["FOO"] # => "BAR"

In Ihrem Rakefile, können Sie Backticks verwenden Sie den Shell-Befehl aufzurufen.

2

Sie können es tun, aber es erfordert einige Änderungen. Zunächst müssen Sie die bereits definierte Spezifikationsaufgabe aufheben, wenn sie vorhanden ist, und sie dann erneut definieren. Oder verwenden Sie einen anderen Namen, wie spec_with_opts. Obwohl ich das Umbenennen gemacht habe.

in Rakefile

Rake::Task["spec"].clear 
RSpec::Core::RakeTask.new(:spec) do |task, args| 
    task.rspec_opts  = ENV['RSPEC_OPTS']   if ENV['RSPEC_OPTS'].present? 
    task.pattern   = ENV['RSPEC_PATTERN']   if ENV['RSPEC_PATTERN'].present? 
    task.exclude_pattern = ENV['RSPEC_EXCLUDE_PATTERN'] if ENV['RSPEC_EXCLUDE_PATTERN'].present? 
end 

task default: :spec 

So, jetzt kann es auf diese Weise ausgeführt werden:

rake spec RSPEC_PATTERN=path/to/spec_file.rb 
rake spec RSPEC_OPTS="--example 'first example'" 
rake spec RSPEC_OPTS="--tag type:special" 

Dieser wird nicht funktionieren, müssten Sie RSPEC_PATTERN

rake spec RSPEC_OPTS="-P '**/*_test.rb'" 

Sie finden verwenden andere Optionen, die in der Quelldatei definiert werden können: https://github.com/rspec/rspec-core/blob/master/lib/rspec/core/rake_task.rb