Как я могу изменить контекст модуля блока описания RSpec? - PullRequest
4 голосов
/ 02 февраля 2012

У меня есть спецификация для объекта, который находится в нескольких уровнях модулей. Примерно так:

describe Foo::Bar::Baz::Quux::Widget do
  it "should == another Widget for the same Doohickey" do
    doohickey = stub
    Foo::Bar::Baz::Quux::Widget.new(doohickey).should == Foo::Bar::Baz::Quux::Widget.new(doohickey)
  end

  it "should != another Widget for a different Doohickey" do
    one_doohickey = stub
    another_doohickey = stub
    Foo::Bar::Baz::Quux::Widget.new(one_doohickey).should == Foo::Bar::Baz::Quux::Widget.new(another_doohickey)
  end
end

Это много повторений, и это выглядит так, будто я использую объект из какого-то другого пространства имен. Я хотел бы установить контекст спецификации Foo::Bar::Baz::Quux. Следующее работает на удивление хорошо:

module Foo::Bar::Baz::Quux
  describe Widget do
    it "should == another Widget for the same Doohickey" do
      doohickey = stub
      Widget.new(doohickey).should == Widget.new(doohickey)
    end

    it "should != another Widget for a different Doohickey" do
      one_doohickey = stub
      another_doohickey = stub
      Widget.new(one_doohickey).should == Widget.new(another_doohickey)
    end
  end
end

Есть только одна проблема. Так как я в Rails, я в зависимости от Управление зависимостями ActiveSupport для автозагрузки Foo::Bar::Baz::Quux модуль. Раньше это случилось, когда я упомянул Foo::Bar::Baz::Quux::Widget. Теперь я сам определяю модуль, поэтому настоящее определение модуля в foo/bar/baz/quux.rb никогда не загружается.

Как я могу изменить контекст постоянного поиска для моей спецификации без определения сам модуль?

Ответы [ 2 ]

5 голосов
/ 02 февраля 2012

Вы можете использовать described_class помощник ...

describe Foo::Bar::Baz::Quux::Widget do
  it "has described_class helper" do
    described_class.should == Foo::Bar::Baz::Quux::Widget
  end
end

Или, для смеха:

describe Foo::Bar::Baz::Quux::Widget do
  def Widget
    described_class
  end

  it "has described_class helper" do
    Widget.should == Foo::Bar::Baz::Quux::Widget
  end
end
0 голосов
/ 02 февраля 2012

Можете ли вы присвоить это переменной?

widget_class = Foo::Bar::Baz::Quux::Widget

это должно немного высушить код. Просто мысль.

...