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