2012-04-25 28 views
22

RSpecRakeのタスクが定義されており、一連のテストを実行するときに特定の順序で実行したいというタスクが定義されています。RSpecタスクを特定の順序で実行する

私はこのような何か試してみた:

task :run_in_order => [:one, :two, :three] do 
    puts "Run suite of tests" 
end 

をそして、それは最初のテストを実行してから停止し、タスクの残りの部分を実行しません。

したがって、Rake構文を使用しても機能しません。 RSpec Rakeタスクのタスク依存性に注目する方法はありますか?ランド とデフォルト:

+2

テストはお互いに独立していなければならないので、非常に悪い習慣です。 – luacassus

+8

@luacassus私は分かっています。私はこのようにしないために何かを得るために取り組んでいます。しかし、その間に、これは物事の方法です。だから私は 'それをしないでください'以外の答えを探しています。これは技術的にRspecでは不可能ですか? – Hillary

+1

実際にテストが合格するかどうかを調べるために "しない"と思うかもしれませんが、クライアントと議論する仕様のレポートを作成して、意味のある順序でレポートを作成できるかなり必要不可欠です。 – digitig

答えて

45

チェックはこのhttp://blog.davidchelimsky.net/2012/01/04/rspec-28-is-released/

-orderランドは、我々は2つのサポートされている値と--orderオプションを追加しました。

rspec --orderランダム(またはrand)は、ランダムな順序で のグループを実行し、各グループ内の例をランダムに実行するようにRSpecに指示します。 私たちは高価な を(すべての)フックの前で再実行したくないので、この方法で(各例の のランダム化を完了するのではなく)実装しました。結果として得られるランダム化が順序依存性バグを公開するのと同様に であるので、適切なトレードオフ。

--order randomを使用すると、RSpecはrandomizerをシードするために使用された乱数を出力します( )。あなたは 順序依存のバグを見つけたと思うとき、あなたは一緒にシードを渡すことができますし、注文が は、一貫性を維持します:

ランド--order:3455 --orderデフォルトグループとの例をロードするためにRSpecのを伝えますこれらは、各ファイルに

を宣言しているよう基本的には--order defaultオプションでそれを実行してspecファイルでテストを注文する必要があります。 。