Отключить группу тестов в rspec?

У меня есть тестовая спецификация, в которой describes класс и внутри которой есть различные contexts, каждый с различными блоками it.

Есть ли способ временно отключить context?

Я попытался добавить вызов pending "temporarily disabled" в самый верх внутри context, который я хочу отключить, и я видел что-то в ожидании, когда я запускал спецификацию, но затем он просто продолжал выполнять остальные тесты.

Это то, что я вроде как:

describe Something
  context "some tests" do
    it "should blah" do
      true
    end
  end

  context "some other tests" do
    pending "temporarily disabled"

    it "should do something destructive" do
      blah
    end
  end
end

но, как я уже сказал, он просто продолжал тесты под ожидающим вызовом.

Поиск привел меня к этому списку списка рассылки, в котором создатель (?) rspec говорит, что это возможно в rspec 2, м работает. Я думаю, что это сработало, но у него не было желаемого эффекта отключения всех следующих тестов, о чем я думаю, когда вижу вызов pending.

Есть ли альтернатива, или я делаю это неправильно?

Ответ 1

Чтобы отключить дерево спецификаций с помощью RSpec 3, вы можете:

before { skip }
# or 
xdescribe
# or 
xcontext

Вы можете добавить сообщение с пропуском, которое будет отображаться на выходе:

before { skip("Awaiting a fix in the gem") }

с RSpec 2:

before { pending }

Ответ 2

Используйте фильтры исключений. С этой страницы: В spec_helper.rb (или rails_helper.rb)

RSpec.configure do |c|
  c.filter_run_excluding :broken => true
end

В вашем тесте:

describe "group 1", :broken => true do
  it "group 1 example 1" do
  end

  it "group 1 example 2" do
  end
end

describe "group 2" do
  it "group 2 example 1" do
  end
end

Когда я запускаю "rspec./spec/sample_spec.rb --format doc"

Затем вывод должен содержать "пример 2 группы 2"

И вывод не должен содержать "пример 1 группы 1"

И вывод не должен содержать "пример 1 группы 1"

Ответ 3

Посмотрите, что вы думаете об этом:

describe "something sweet", pending: "Refactor the wazjub for easier frobbing" do
  it "does something well"
  it "rejects invalid input"
end

Мне нравится видеть причины с моими отложенными пунктами, когда я отключу что-то "некоторое время". Они служат небольшими комментариями /TODO, которые представлены регулярно, а не похоронены в комментарии или исключенном примере/файле.

Изменение it до pending или xit выполняется быстро и просто, но я предпочитаю хэш-конструкцию. Он дает вам всю документацию, является выпадающим (не меняет описание/контекст/это так, я должен решить, что использовать позже) и так же легко удаляется, если решение принято или блокировщик удален.

Это работает одинаково для групп и отдельных примеров.

Ответ 4

другой. https://gist.github.com/1300152

используйте xdescribe, xcontext, xit, чтобы отключить его.

Update:

Так как rspec 2.11, по умолчанию он включает xit. поэтому новый код будет

# put into spec_helper.rb
module RSpec
  module Core
    module DSL
      def xdescribe(*args, &blk)
        describe *args do
          pending 
        end
      end

      alias xcontext xdescribe
    end
  end
end

Использование

# a_spec.rb
xdescribe "padding" do
  it "returns true" do
    1.should == 1
   end
end 

Ответ 5

Использовать в ожидании вместо описания. Если ваш блок:

context "some other tests" do
  it "should do something destructive" do
    blah
  end
end

Вы можете пропустить весь блок:

pending "some other tests" do
  it "should do something destructive" do
    blah
  end
end

Ответ 6

describe "GET /blah" do

  before(:each) { pending "Feature to be implemented..." }

  it { expect(page).to have_button("Submit") }
  it { expect(page).to have_content("Blah") }
end

Ответ 7

Просто чтобы объяснить, что происходит с вашим кодом. Включая его там, где у вас есть, он просто получает оценку (и, следовательно, запускается), когда файл загружается во время запуска. Однако вам нужно, чтобы он запускался при выполнении тестов. Поэтому ответы предложили помещать pending (RSpec 2) или skip (RSpec 3) в блок before.