Тест Rspec, о порядке и до (: все) - PullRequest
1 голос
/ 25 октября 2011

Если у меня есть rspec тест, подобный следующему:

context "main context" do

  before(:all) do
     # code for before :all
     puts "my fore :all"
  end 
  describe "Scenario-1" do
     context "my context 1" do
        it "should blablabla" do

     end
        it "should blablabla" do

     end
      end
      context "my context 2" do
        it "should blablabla" do

    end
        it "should blablabla" do

     end
      end
    end # end of describe "Scenario-1"

    describe "Scenario-2"
       context "my context 3" do
         it "should blablabla" do

     end
         it "should blablabla" do

     end
       end
    end #end of "Scenario-2"

end #end of main context

Два вопроса:

1. Это так, что объявление before(:all) фактически вызывается в каждый субконтекст ?Я думал, что он вызывается только один раз за весь тест, но когда я запускаю свой тест, Я испытал , что код в before(:all) выполняется в каждом context,Вот и все, когда запускается каждый context, почему?

(Как вы заметили, у меня есть puts как часть моего before(:all) кода, и Я видел, что это помещает в каждый под-контекст при запуске теста , почему? Isn't before(:all) должен выполняться только один раз в течение всего теста ??)

2. Когда я запускаю тест, почему порядок выполнения теста равен снизуконтекст к контексту вверх (в то время как внутри каждого контекста порядок «это» вверх-вниз)?Как изменить порядок тестирования на уровне контекста?

Ответы [ 2 ]

5 голосов
/ 25 октября 2011

1) before (: all) должен запускаться только один раз ... но есть известная проблема, связанная с тем, что он делает именно то, на что вы указали. Обсуждено здесь: http://rubyforge.org/pipermail/rspec-users/2010-September/018

2) тесты должны выполняться независимо друг от друга. чтобы убедиться, что вы не делаете никаких предположений. Таким образом, наборы тестов часто запускают тесты в случайном или обратном порядке - чтобы быть уверенным, что вы этого не делаете.

1 голос
/ 25 октября 2011

Во-первых, прочитайте это - особенно часть внизу страницы

во-вторых, уловка, которую я недавно узнал, заключается в том, что вы можете использовать after(:all)

after :all do
  @users.each { |user| user.destroy! }
end

Довольно аккуратно

...