2012-04-07 76 views
17

我在學習rspec。我似乎無法測試軌道控制器方法。當我在測試中調用方法時,rspec只是返回一個未定義的方法錯誤。下面是我的測試例子如何使用rspec測試控制器方法?

it 'should return 99 if large' do 
    GamesController.testme(1000).should == 99 
end 

,這裏是錯誤:

Failure/Error: GamesController.testme(1000).should == 99 
NoMethodError: 
    undefined method `testme' for GamesController:Class 

我有在GamesController一個TESTME方法。我不明白爲什麼測試代碼無法看到我的方法。

任何幫助表示讚賞。

+0

它是一個私人e方法? – plainjimbo 2012-04-07 05:27:33

回答

4

你嘗試測試類的方法,但控制器有實例方法

你需要GamesController.new.testme(1000).should == 99

甚至GamesController.new.send(:testme, 1000).should == 99,因爲,因爲我認爲,這不是動作的方法,但私有或保護。

操作方法進行試驗this way

+0

好的。現在我明白了。類和實例方法之間的差異是一種逃避我的微妙之處。正如你所看到的,我對Ruby和Rails仍然陌生。順便說一下,鏈接到rspec-rails文檔是很好的。我不知道這種資源。謝謝。 – 2012-04-07 05:34:53

25

我認爲正確的做法是這樣的:

describe GamesController do 
    it 'should return 99 if large' do 
    controller.testme(1000).should == 99 
    end 
end 

在軌控制規範,當你把控制器類describe,您可以使用controller方法獲取一個實例:P
很明顯,如果testme方法是私人的,你仍然必須使用controller.send :testme

+0

非常感謝 - 這在文檔中很難找到 – Andy 2015-08-30 11:41:52