#ruby #rspec
#ruby #rspec
Вопрос:
У меня есть тестовая спецификация, которая describes
является классом и внутри которой есть различные, contexts
каждый с различными it
блоками.
Есть ли способ, которым я могу context
временно отключить?
Я попытался добавить pending "temporarily disabled"
вызов в самом верху в context
, который я хочу отключить, и я действительно видел что-то о pending при запуске спецификации, но затем он просто продолжил выполнение остальных тестов.
Это то, что у меня вроде как было:
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 }
Комментарии:
1. Как именно вы делаете это на блоке, который имеет:
describe 'XXXXX' do .... end
2. @p.matsinopoulos Просто добавьте это в следующую строку
describe 'XXXXX' do
. Сработало как по волшебству, спасибо @Pyro!3. По какой-то причине я не могу заставить это работать с rspec 3.
4.использование rspec 3
pending
гарантирует, что спецификации не выполнены, но вы можете использоватьskip
или даже простоxdescribe
myronmars.to/n/dev-blog/2014/05 /…5. Это приятно. Вы также можете включить сообщение после ‘skip’, которое будет отображаться в выходных данных.
Ответ №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 —формат doc»
Тогда вывод должен содержать «группа 2, пример 1»
И вывод не должен содержать «группа 1, пример 1»
И вывод не должен содержать «пример группы 1 2»
Ответ №3:
Посмотрим, что вы думаете об этом:
describe "something sweet", pending: "Refactor the wazjub for easier frobbing" do
it "does something well"
it "rejects invalid input"
end
Мне нравится видеть причины с моими ожидающими элементами, когда я отключаю что-то «на некоторое время». Они служат в виде небольших комментариев / задач, которые представляются регулярно, а не скрыты в комментарии или исключенном примере / файле.
Изменить it
на pending
или xit
быстро и просто, но я предпочитаю конструкцию хэша. Он предоставляет вам документацию для каждого запуска, является выпадающим (не изменяет описание / контекст / it, поэтому я должен решить, что использовать позже) и так же легко удаляется, если принято решение или удален блокиратор.
Это работает одинаково для групп и отдельных примеров.
Комментарии:
1. Также я не уверен, работает ли это так же для describe, но в ожидающем тесте фактически выполняется тест и завершается неудачей, если тест начинает проходить. xdescribe (я думаю, точно так же, как xit) — просто не запускает его.
2. подтвердил, что это работает как с
pending:
, так иskip:
с rspec 3.6.0. Мне кажется, это лучшее решение. в rspec3 в ожидании все еще выполняются тесты, ноskip
не выполняется (как бы вы ни применялиskip
).
Ответ №4:
еще один. 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, amp;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
блок.