2013-03-06 15 views
8

Ich verwende Rails 4.0.0.beta1. Ich habe zwei Verzeichnisse hinzugefügt: app/services und test/services.Rake: Test läuft nicht benutzerdefinierte Tests im Unterverzeichnis

Ich habe auch diesen Code, basierend auf Lesen testing.rake of railties:

namespace :test do 
    Rake::TestTask.new(services: "test:prepare") do |t| 
    t.libs << "test" 
    t.pattern = 'test/services/**/*_test.rb' 
    end 
end 

ich gefunden habe, dass rake test:services die Tests in test/services läuft; rake test führt diese Tests jedoch nicht durch. Es sieht aus wie es sollte; hier ist die code:

Rake::TestTask.new(:all) do |t| 
    t.libs << "test" 
    t.pattern = "test/**/*_test.rb" 
end 

Habe ich etwas übersehen?

Antwort

11

eine Zeile wie diese nach dem Test Aufgabendefinition hinzufügen:

Rake::Task[:test].enhance { Rake::Task["test:services"].invoke } 

Ich weiß nicht, warum sich nicht automatisch abgeholt zu werden, aber das ist die einzige Lösung, die ich gefunden habe, die für die Arbeiten Test :: Einheit.

Ich denke, wenn Sie laufen würden rake test:all würde es Ihre zusätzlichen Tests ausführen, aber rake test allein wird nicht ohne das Snippet oben.

+0

Guter Punkt: 'test' und' Test: all' Aufgaben unterschiedlich sind. –

+0

Re: "Ich weiß nicht, warum sie nicht automatisch abgeholt werden" - Ich weiß nicht, ob dies Absicht ist oder nur eine Asymmetrie, die sich bei Änderungen entwickelt hat. Also fügte ich einen [Kommentar zu der Pull-Anfrage hinzu, der die Aufgabe test: all hinzufügte] (https://github.com/rails/rails/pull/9177#issuecomment-14575192). –

+0

Vielen Dank, Jim. – Ashitaka

4

Für eine neuere Rails-Version mit (4.1.0 in meinem Fall)

Verwenden Rails::TestTask statt Rake::TestTask und außer Kraft setzen run Aufgabe:

namespace :test do 
    task :run => ['test:units', 'test:functionals', 'test:generators', 'test:integration', 'test:services'] 
    Rails::TestTask.new(services: "test:prepare") do |t| 
    t.pattern = 'test/services/**/*_test.rb' 
    end 
end 
3

Jims Lösung funktioniert, aber es endet Lauf die zusätzliche Testsuite als separate Aufgabe und nicht als Teil des Ganzen (zumindest unter Verwendung von Rails 4.1). Teststatistiken werden also zweimal statt aggregiert ausgeführt. Ich glaube nicht, dass dies das gewünschte Verhalten ist.

Dies ist, wie ich diese (4.1.1 mit Rails) Lösung endete

# Add additional test suite definitions to the default test task here 

namespace :test do 
    Rails::TestTask.new(extras: "test:prepare") do |t| 
    t.pattern = 'test/extras/**/*_test.rb' 
    end 
end 

Rake::Task[:test].enhance ['test:extras'] 

Daraus ergibt sich genau das erwartete Verhalten, indem Sie einfach mit der neuen test:extras Aufgabe in der Reihe von Aufgaben, die von rake test ausgeführt und natürlich der Standardwert rake. Sie können diesen Ansatz verwenden, um auf diese Weise beliebig viele neue Testsuiten hinzuzufügen.

Wenn Sie Rails 3 verwenden, glaube ich, nur für Rake::TestTask ändern wird für Sie arbeiten.

3

Oder einfach laufen rake test:all

Wenn Sie alle Tests standardmäßig ausgeführt werden soll, außer Kraft setzen Prüfaufgabe:

namespace :test do 
    task run: ['test:all'] 
end