Намаляване на дублирането на код в RSpec

Имам rspec тест, който съдържа около 20 ExampleGroups (дефинирани от ключовата дума 'describe'). Всяка ExampleGroup съдържа метод 'after', който да се извиква след всеки пример.

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

В този тест методът „след“ е идентичен във всичките 20 групи примери. Понастоящем просто използвам миксин, за да предпазя от дублиране на кода, но изглежда излишно винаги да трябва да посочвам клаузата „след“ и че тя трябва да извиква миксина във всяка една ExampleGroup.

Има ли начин да направя това, така че да не се налага да посочвам „след“ във всяка ExampleGroup?


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


Отговори (2)


Имайки предвид, че всички тези примерни групи имат един и същ метод след, свързани ли са по някакъв начин? Защото тогава можете просто да вложите групите под родител.

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 ще стартира родителското групиране преди/след за дъщерните блокове и ще разполага с mixin за тях.

person Michael Papile    schedule 29.03.2011

Можете също така да напишете своя модул, така че той автоматично да добавя следния блок:

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