Отключить группу тестов в rspec? - PullRequest
95 голосов
/ 07 мая 2011

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

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

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

Вот что у меня вроде получилось:

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 ]

150 голосов
/ 04 октября 2012

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

before { skip }
# or 
xdescribe
# or 
xcontext

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

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

с RSpec 2 :

before { pending }
43 голосов
/ 07 мая 2011

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

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

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

19 голосов
/ 01 мая 2014

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

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

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

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

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

9 голосов
/ 20 октября 2011

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

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

Обновление:

Начиная с 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 
3 голосов
/ 17 марта 2013

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

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
1 голос
/ 31 октября 2013
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
0 голосов
/ 16 января 2015

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...