2011-09-13 39 views
4

在我的Rake文件:如何爲RSpec編寫自定義Rake任務?

require 'rspec/core/rake_task' 

desc 'Default: run specs.' 
task :default => :spec 

desc "Run specs" 
RSpec::Core::RakeTask.new do |task| 
    task.pattern = "**/spec/*_spec.rb" 
    task.rspec_opts = Dir.glob("[0-9][0-9][0-9]_*").collect { |x| "-I#{x}" }.sort 
    task.rspec_opts << '-r ./rspec_config' 
    task.rspec_opts << '--color' 
    task.rspec_opts << '-f documentation' 
end 

在rspec_config.rb

RSpec.configure {|c| c.fail_fast = true} 

我的文件結構:

|-- 001_hello 
| |-- hello1.rb 
| `-- spec 
|  `-- hello_spec.rb 
|-- 002_hello 
| |-- hello2.rb 
| `-- spec 
|  `-- hello_spec.rb 
|-- 003_hello 
| |-- hello3.rb 
| `-- spec 
|  `-- hello_spec.rb 
|-- Rakefile 
`-- rspec_config.rb 

當耙任務將運行它會做上述操作順序文件結構。 如何確保'001_hello'失敗,那麼它不應該運行'002_hello'?

目前它運行在相反的順序,即。 '003_hello'然後'002_hello'然後'001_hello'。

回答

6

您需要修改任務模式以使文件按特定順序運行。例如:

RSpec::Core::RakeTask.new do |task| 
    task.pattern = Dir['[0-9][0-9][0-9]_*/spec/*_spec.rb'].sort 
    task.rspec_opts = Dir.glob("[0-9][0-9][0-9]_*").collect { |x| "-I#{x}" } 
    task.rspec_opts << '-r ./rspec_config --color -f d' 
end 

這將按字母順序運行所有匹配###_*/spec/*_spec.rb的文件。

+0

感謝Thomakos,但是如果我按照你的說法做了以下的錯誤:':29:'require':no such file to load - hello1(LoadError) \t from <內部:lib/ruby​​gems/custom_require>:29:在'require'中 \t from /home/suvankars/RnD/rspec/001_hello/spec/hello_spec.rb:1:in''' – suvankar

+0

'重新從你的載入路徑丟失文件 - 然後 - 這與排序無關。我會更新我的文章,並回答如何添加這些文件。理想情況下,您應該以其他方式將這些文件添加到路徑中,否則應該在您的規格中包含文件的相對路徑。 –

+0

我明白了。感謝Thomakos指出。 – suvankar

1

我不明白如果執行順序實際上是你的問題。

無論如何,如果應用程序在出現錯誤時應該退出,爲什麼不引發異常呢?

編輯
由於執行順序是有意義的給你,我覺得

task.rspec_opts = Dir.glob("[0-9][0-9][0-9]_*").collect { |x| "-I#{x}" }.sort 

不會做你期望的。

可能文件然後被包含在沒有特定的順序,所以你應該編程調用每個文件,並檢查它。

HTH

+0

感謝您的寶貴意見。但執行順序對我來說非常重要。我想要類似於ruby koans的東西。如果第一個失敗,我有三個測試用例,那麼它將不會運行第二個和第三個。第一個固定後,它將運行其餘的一切,如果第二個失敗,那麼第三個不會運行,等等。使用該特定代碼 – suvankar

+0

它調用在適當順序'@ rspec_opts = [ 「-I001_hello」, 「-I002_hello」, 「-I003_hello」, 「-r ./rspec_config」, 「--color」 所有文件, 「-f文檔」],但它們按相反的順序執行。如何改變執行順序? – suvankar

相關問題