1

次のような構造のテスト スイートがあります。

describe ... do
  [list of dates].each do
    describe
      before(:all) do
        base_date = ...
      end
      describe ... do
        [list of times].each do
          describe ... do
            before(:all) do
              base_time = base_date + ...
              DateTime.stub!(:now).and_return(base_time)
            end
            describe ... do
              <test using records within date-time range based on base_time>
            end
            describe ... do
              <another test using records within date-time range based on base_time>
            end
          end
        end
      end
    end
  end
end

最初のテストは DateTime(now) == base_time ですが、2 番目のテストは DateTime(now) == my computer's date-time であり、スタブが有効ではないことを示しています。stub!呼び出しを各ループに移動するとdescribe問題は解決しますが、記述どおりに機能しない理由を理解したいと思います。

4

1 に答える 1

0

その理由はおそらく別の場所にあり、スタブは複数のネストされた記述ブロックで正常に機能します。多分 :all vs :each が問題です:before(:all)すべての記述ブロックが実行される前に一度実行されますがbefore(:each)、記述ブロックが実行される前に毎回実行されます。

または、DateTime のスタブ化と関係があるかもしれません。

DateTime.any_instance.stub(:now).and_return(base_time)
于 2012-10-18T10:33:24.660 に答える