2012-02-02 73 views
4

我已經獲得了一些模塊級別的對象的規範。事情是這樣的:如何更改RSpec描述塊的模塊上下文?

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真正的定義。

如何更改我的規範的常量查找上下文沒有定義 該模塊本身?

回答

5

可以使用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

呀,'described_class'是我們已經使用過,但我發現很難讀書。我希望調用該對象來查看同一名稱空間中的任何其他對象將調用它的方式。好吧。我會在接受之前看看是否有人能夠勝過這個答案。 – Peeja 2012-02-02 22:15:35

+0

另一件事,如果你想在同一個命名空間describe_class中引用其他類也是不好的。也在尋找更好的解決方案。 – PhilT 2013-02-08 11:24:50

0

可以分配給一個變量?

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

這應該幹掉一點點的代碼。只是一個想法。