Сокращение дублирования кода в RSpec - PullRequest
1 голос
/ 29 марта 2011

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

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

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

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

Ответы [ 2 ]

4 голосов
/ 30 марта 2011

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

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 будет запускать родительское группирование до / после для дочерних блоков и иметь доступный для них миксин.

0 голосов
/ 02 ноября 2012

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

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...