2011-12-17 228 views
0

這很奇怪,可能是由於我剛剛接觸ruby。我創建了一個寶石,它的工作原理,所有的單元測試工作,但是當我在irb中執行以下操作時,找不到「配料」方法;irb無法識別方法

1.9.2-p290 :002 > require "tablecloth" 
=> true 
1.9.2-p290 :003 > tc = TableCloth.new "1 cup of sugar" 
=> #<TableCloth:0x864a728> 
1.9.2-p290 :004 > tc.ingredients 
NoMethodError: undefined method `ingredients' for #<TableCloth:0x864a728> 
from (irb):4 
from /home/mikey/.rvm/rubies/ruby-1.9.2-p290/bin/irb:16:in `<main>' 
1.9.2-p290 :005 > 

整個寶石在這裏;

https://github.com/mikeyhogarth/tablecloth

顯然,這是由於我是新的紅寶石。這實際上並不妨礙開發,我只想知道爲什麼在這種情況下irb似乎無法註冊該方法!

回答

2

我認爲你正在IRB中加載一個不同於舊版本的gem,而不是你在單元測試中的版本。您的單元測試可能會測試位於開發目錄中的gem代碼,但是當您在IRB中執行require "tablecloth"時,它會加載已安裝到系統的gem目錄中的gem。如果您使用的是RVM,則可以查看$ GEM_HOME環境變量以查看該目錄是什麼。

您可能需要運行一個耙子任務,如rake install或類似的東西來安裝您的寶石,然後才能在irb中使用它。

+0

謝謝蕾,會試試看! –

+0

你可以看到它正在加載哪個版本的'gem哪個桌布',如果你'gem安裝gem-open',你也可以做'gem open tablecloth'並且它會打開被加載到'$ EDITOR'中的gem,允許您瀏覽實際加載的gem。 –

+0

工作過一個善良的人,當我第一次開始時,我已經建立了寶石。重建基本上固定它。我想我沒有得到的那部分是我認爲「reqiure」會要求指定的文件,但是沒有意識到它會首先檢查寶石 –