3

独立性と堅牢性を確保するために、RSpec スイートをランダムな順序で実行しています。ただし、スペックを順番に実行したい場合がいくつかあります。コマンドラインでしか使えない--order defaultのはわかっていますが、これをCIに統合したいです。CI には TDDium を使用しており、CI サーバーでランダムに実行し続けたいと考えていますが、特定の仕様ファイルが順番に実行されるようにします。

質問

ファイルごとに、RSpec がそのファイルをデフォルトの順序で実行するように指定する方法はありますか? rspec-core にマージされたカスタマイズされた順序付け戦略のサポートがあるようですが、それは完全に焼き付けられているようには見えません (そして、それがサポートされているかどうかはわかりませんbefore :all)。 .

討論

そして、 「仕様は独立している必要がある」という理由で反対票を投じた別の質問があるので、「それをすべきではない」という議論を先制的に回避しようとする私のユースケースを述べさせてください。

システム状態のさまざまな側面が時間とともに変化する複雑なモデルがあります。時間の経過に伴うさまざまな状態の変化を追跡するために、そのシステムを監視している分析システムがあります。Timecop gemのおかげで、過去にさかのぼって一連の相互作用モデルを作成し、その後、たとえば 5 日間、分析システムから見たシステムを、既知の条件の下で毎日見ることができます。具体的には、システムに組み込まれている仮定を考慮して、一部の計算が正しいことを確認します。

ここで、5 つの個別の記述ブロックを作成し、それぞれが履歴の 5 日間のそれぞれについて個別の条件を設定するプロセスを実行できることを理解しましたが、時間をステップスルーして条件の変化を観察しながら観察する方がはるかに理にかなっています。その状態で。より効率的で、システムで実際に起こっていることとよりつながります。あちこちでさまざまな応答をモックできることは理解しており、それを行っていますが、基本システムと分析システムの間の「リアルタイム」相互作用をステップスルーすることに興味があります。

4

2 に答える 2

2

rspecコアのマージされた機能のコードではなく、仕様を読むべきでした。この仕様を考えると、それはかなり明らかです。

custom_ordered_spec.rb の場合:

    RSpec.configure do |config|
      config.order_groups_and_examples do |list|
        list.sort_by { |item| item.description }
      end
    end

    describe 'group B' do
      specify('group B example D')  {}
      specify('group B example B')  {}
      specify('group B example A')  {}
      specify('group B example C')  {}
    end

    describe 'group A' do
      specify('group A example 1')  {}
    end

グループとグループ内の例の両方が、説明順に並べられます。config.order_groupsさらに、とを呼び出すこともできるようですconfig.order_examples

これについては、もう少し詳細な説明を含む私のブログ投稿を参照してください。

于 2012-10-24T00:34:13.797 に答える
0

現在の (3.5) Rspec には order_groups_and_examples メソッドがありません。代わりに、順序付けを登録できます:

RSpec.configure do |config|
  config.register_ordering :alphabetical do |list|
    list.sort_by { |item| item.description }
  end
end
RSpec.context "Test in alphabetic order", :order => :alphabetical  do
  describe 'group B' do
    specify('group B example D')  {}
    specify('group B example B')  {}
    specify('group B example A')  {}
    specify('group B example C')  {}
  end

  describe 'group A' do
    specify('group A example 1')  {}
  end
end
于 2017-03-23T12:54:29.160 に答える