Уменьшение дублирования кода в RSpec

У меня есть тест rspec, который содержит около 20 групп примеров (определяемых ключевым словом «описать»). Каждая группа примеров содержит метод «после», который вызывается после каждого примера.

describe "grouping" do
  include Common
  after do
    after_example
  end
end

В этом тесте метод «после» идентичен для всех 20 групп примеров. В настоящее время я просто использую миксин, чтобы не дублировать код, но мне кажется излишним всегда указывать предложение «после» и то, что он должен вызывать миксин в каждой отдельной группе примеров.

Есть ли способ сделать это, чтобы мне не нужно было указывать «после» в каждой группе примеров?


person juan2raid    schedule 29.03.2011    source источник


Ответы (2)


Хорошо, что все эти группы примеров имеют одинаковый метод after, они как-то связаны? Потому что тогда вы можете просто вложить группы в родителя.

describe "parent grouping" do
  include Common
  after do
    after_example
  end

  describe "child 1" do
    pending
  end

  describe "child 2" do
    pending
  end

  ...
end

RSpec будет запускать родительскую группировку до/после для дочерних блоков и иметь доступный для них миксин.

person Michael Papile    schedule 29.03.2011

Вы также можете написать свой модуль так, чтобы он автоматически добавлял блок after:

module Common
  def included(base)
    base.after do
      # add shared "after" logic here
    end
  end
end

describe 'a spec' do
  include Common
  # no need to add the after logic, since it got added on 'include'
end
person jakeonrails    schedule 02.11.2012