Вимкнути групу тестів у rspec?


103

У мене є тестова специфікація, у якої 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дзвінок.

Чи є альтернатива чи я роблю це неправильно?

Відповіді:


166

Щоб вимкнути дерево специфікацій за допомогою RSpec 3, ви можете:

before { skip }
# or 
xdescribe
# or 
xcontext

Ви можете додати повідомлення з пропуском, яке з’явиться у висновку:

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

з RSpec 2 :

before { pending }

1
Як саме це робити на блоці, який містить:describe 'XXXXX' do .... end
p.matsinopoulos

2
@ p.matsinopoulos Просто додайте його до наступного рядка describe 'XXXXX' do. Працював як шарм, дякую @Pyro!
честербр

Простіше рішення, ніж фільтри, +1
dolzenko

Я тебе люблю. Я тобі завдячую пивом!
Aldo 'xoen' Giambelluca

2
Це добре. Ви також можете включити повідомлення після "пропустити", яке з’явиться у висновку.
Ян Геттіч

44

Використовуйте фільтри виключення . З цієї сторінки: У вашій 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

Подивіться, що ви думаєте про це:

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

Мені подобається бачити причини моїх відкладених предметів, коли я дещо відключаю "на деякий час". Вони служать невеликими коментарями / TODO, які регулярно подаються, а не закопуються у коментарі чи виключеному прикладі / файлі.

Зміна itдо pendingабо xitшвидко і легко, але я віддаю перевагу хеш будівництва. Він дає вам щоденну документацію, це випадаючий (не змінює опис / контекст / це, тому я повинен вирішити, що використовувати знову пізніше), і так само легко видаляється, якщо рішення прийнято або блокатор видалений .

Це працює так само для груп та окремих прикладів.


Крім того, я не впевнений, чи працює він так само для опису, але в процесі очікування насправді запускається тест, і не вдається, якщо тест починає здавати. Xdescribe (я думаю, як xit) - просто не виконує його.
PL J

1
підтвердив, що це працює, і в, pending:і skip:в rspec 3.6.0. Здається, найкраще рішення для мене. у rspec3 очікує на те, що все ще виконується тести, але skipне (проте ви застосуєте skip).
jrochkind

9

інший. 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

Використовуйте очікування замість опису. Якщо ваш блок:

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

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.