Наследовать пример во вложенных контекстах Rspec - PullRequest
3 голосов
/ 20 октября 2011

Как вы можете повторно использовать примеры, чтобы переопределять детали только во вложенных контекстах?

Что-то вроде этого (вместо него я использую thee, что указывает на то, что он выполняется во вложенном контексте.НЕ в RSpec, именно то, что я хочу):

describe "Abilities" do
  subject { Abilities.new user }

  context "allowed" do
    let(:user) { Factory(:power_user) }
    thee { should be_able_to :create, object }
    thee { should be_able_to :read, object }
    thee { should be_able_to :update, object }

    context "comment" do
      let(:object) { Factory(:comment) }
    end

    context "post" do
      let(:object) { Factory(:post) }
    end

    context "blog" do
      let(:object) { Factory(:blog) }
    end

  end
end

Этот пример будет в конечном итоге с 3 примерами (создание, чтение, обновление) для 3 контекстов (комментарий, публикация, блог), в результате всего получится 9 примеров..

Как этого добиться (без написания общих примеров)?

Ответы [ 2 ]

5 голосов
/ 20 октября 2011

Нет способа наследовать примеры, но вы можете создать метод класса:

describe "Abilities" do
  subject { Abilities.new user }

  def self.should_allow_stuff
    it { should be_able_to :create, object }
    it { should be_able_to :read, object }
    it { should be_able_to :update, object }
  end

  context "allowed" do
    let(:user) { Factory(:power_user) }

    context "comment" do
      let(:object) { Factory(:comment) }
      should_allow_stuff
    end

    context "post" do
      let(:object) { Factory(:post) }
      should_allow_stuff
    end

    context "blog" do
      let(:object) { Factory(:blog) }
      should_allow_stuff
    end

  end
end

Вы можете при необходимости выполнить рефакторинг.

1 голос
/ 20 октября 2011

Почему вы не хотите писать общие примеры?Это именно то, для чего они.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...