2011-07-17 34 views
0

我正在寫一些現有的Ruby代碼測試它看起來像注入變量爲Ruby的功能

module Foo 
    module Bar 

    private 

    def function_i_want_to_test (a, b) 
     if controller.is_something? a, b 
     puts a 
     else 
     puts b 
     end 
    end 
    end 
end 

的varaible controller奇蹟般地插入函數從別的地方。要從我的測試中訪問這個函數,我可以在我的測試類中執行include Foo::Bar,然後正常調用該函數。不幸的是,這不起作用,因爲controller沒有設置。任何想法如何從我的測試中設置controller變量?

+1

我不明白你的問題。您發佈的代碼中沒有'controller'變量。只有一個'controller'方法調用。那麼,你的問題是什麼?如何定義一個名爲'controller'的方法?這很簡單:'def controller; end'。 –

回答

1

該模塊似乎假定「控制器」在它所包含的類/模塊中可用。也許它包含在Rails ActionController類中?此外,它可能是一個方法調用,而不是局部變量。所以,做這樣的事情:

class MyClass 
    include Foo::Bar 

    def controller 
    # Do stuff. 
    end 
end 

對於一個測試,你也可以用摩卡(或其他嘲諷庫),使這一進程少一些冗長。

def test_my_thing 
    thing = Object.new 
    thing.extend(Foo::Bar) 
    thing.expects(:controller).returns("whatever") 
end