Перепишите общие примеры групп в rspec2 - PullRequest
1 голос
/ 24 февраля 2011

В rspec 1 я мог бы сделать

describe "Something", :shared => true do
 include SomeModule # which has the :a_method method

 def a_method(options)
   super(options.merge(:option => @attr)
 end

 it "foofoofoo" do
 end
end

describe "Something else" do
  before(:each) do
    @attr = :s_else
  end

  it_should_behave_like "Something"

  it "barbarbar" do
    a_method(:name => "something else")
    Something.find("something else").name.should == "Something else"
  end
...
end

То есть я мог бы использовать :shared => true не только для рефакторинга примеров, но также для обмена определениями и атрибутами методов.Я понимаю, что пример надуманный, но как написать его в rspec> = 2, не касаясь модуля SomeModule или класса Something?

1 Ответ

2 голосов
/ 24 февраля 2011

Вы можете сделать это с помощью shared_examples_for

shared_examples_for "something" do
  include SomeModule # which has the :a_method method

  def a_method(options)
    super(options.merge(:option => @attr))
  end

  it "foofoofoo" do
  end
end

И позвонить с помощью it_behaves_like:

it_behaves_like "something"

РЕДАКТИРОВАТЬ

Жуанправильно указывает, что это не включает SomeModule для примеров в блоке description.Включение должно происходить вне общей группы примеров, например, в верхней части файла спецификации

include SomeModule # which has the :a_method method

# ...

shared_examples_for "something" do
  def a_method(options)
    super(options.merge(:option => @attr))
  end

  it "foofoofoo" do
  end
end

Дэвид Челимски обсуждает некоторые новые возможности общих примеров в RSpec 2, которые могут иметь отношение к этот пост .

...