2010-11-19 76 views
3

我試圖爲Rspec定義一些控制器宏。使用Rails 3和投機/支持/宏/ controller_macros.rb已經定義了我的宏林,這個文件看起來像這樣:在Rspec中添加控制器宏

module ControllerMacros 
    def self.login_admin 
     #code 
    end 
end 
在我的規格幫手

我:

config.include(ControllerMacros, :type => :controller) 

所以我控制器規格我只是叫login_admin在我的管理測試,但是當過我使用的方法,我得到

undefined local variable or method `login_admin' for #<Class:0xb6de4854> (NameError) 

起初,我以爲沒有被列入該controller_macros.rb但是當我添加了一個「放」到文件但那顯示該文件至少正在執行。

我無法看到我的設置有任何問題,並將login_admin方法複製到describe塊中工作正常,所以我不知道它有什麼問題。

+1

我不是這方面的專家,但我認爲這是做與範圍(自我。 )在課堂上定義的方法。您可能需要包含它或使用base.included或base.extended擴展它,或者刪除自己。 – scaney 2010-11-19 22:01:00

+0

對不起self.included或自我。擴展 – scaney 2010-11-19 22:07:58

回答

2

嘗試

ControllerMacros.login_admin 

或從方法定義中刪除self

+0

同意,偵察那樣做 – scaney 2010-11-19 22:11:40

+0

這樣做的工作,但不是它應該真的與rspec – Arcath 2010-11-19 22:23:24

+0

完成的方式對不起,我不明白你的意見。如果你正在定義一個宏,你想把它包含在許多不同的例子中,不是嗎?所以不需要使用self來定義類方法。還是你的意思是別的? – zetetic 2010-11-19 23:04:42

1

一號線答案:從方法定義

爲什麼刪除自身?包含的模塊的方法中的RSpec例子

ControllerMacros定義將在你的RSpec例如可用login_admin方法login_admin

具體而言是可用的:

重寫spec/support/macros/controller_macros.rb作爲

module ControllerMacros 
    def login_admin 
     #code 
    end 
end 

然後告訴Rspec包含宏

config.include(ControllerMacros, :type => :controller)