Отключить группу тестов в 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 звонок.

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

7 91

7 ответов:

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

before { skip }
# or 
xdescribe
# or 
xcontext

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

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

С RSpec 2:

before { pending }

использовать фильтры исключения. С этой страницы: В вашем 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 --формат doc"

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

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

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

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

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

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

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

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

еще один. https://gist.github.com/1300152

использовать xdescribe, xcontext, всего в нескольких минутах, чтобы отключить его.

обновление:

начиная с 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 

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

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
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

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