2013-03-01 68 views
0

所以我想編寫一些代碼來爲Ruby做一個RSPEC測試。但即使第一次測試通過,我也遇到了一些麻煩。我想如果我能夠得到這個小小的幫助,我就可以休息一下。但是如果這樣可以更容易地提供建議,我可以發佈其餘的測試。RSPEC測試和Ruby對象

所以它構建了一個華氏/攝氏轉換器,但是使用對象和類而不是隻定義一些方法來完成轉換。

,第一部分是這樣的

require "temperature" 

describe Temperature do 

    describe "can be constructed with an options hash" do 
    describe "in degrees fahrenheit" do 
     it "at 50 degrees" do 
     Temperature.new(:f => 50).in_fahrenheit.should == 50 
     end 

在1個指令的提示中說,溫對象建築工應該接受一個選項可以用哈希:攝氏:華氏度條目。

任何幫助或提示將不勝感激。過去幾周我一直堅持這個測試。提前致謝。

+0

這是我迄今試圖通過的第一個測試。 等級溫度 attr_accessor:華氏 DEF初始化選項= {} \t @fahrenheit =:F 端 DEF in_fahrenheit({:F}) \t Temperature.new({:F}) 端 端 – PaperKraftMike 2013-03-01 16:20:38

+1

您的代碼片段不完整。請添加缺少的「結束」關鍵字。 – LazyMonkey 2013-03-01 16:22:00

回答

1

我認爲你的溫度類需要一些工作。爲什麼不具有可以設置溫度對象的基本值的「比例」屬性?

這裏是你貼什麼樣的修改版本:

class Temperature 
    attr_accessor :value, :scale 
    def initialize(value, options={}) 
    @value = value 
    if options.has_key?(:scale) 
     @scale = options[:scale] 
    else 
     @scale = :c 
    end 
    end 
    def in_fahrenheit() 
    if @scale == :c 
     (@value * 9.0/5.0) + 32.0 
    else 
     @value 
    end 
    end 
end 

有沒有必要當你調用#in_fahrenheit創建一個新的溫度對象。你可以讓你的當前對象將一個數字(存儲在一個屬性中)轉換成華氏度。您可以在創建對象時添加溫度信息:

t1=Temperature.new(68, :scale =>:f) 
t2=Temperature.new(0) 

2.0.0dev :199 > t1.in_fahrenheit => 68 
2.0.0dev :200 > t2.in_fahrenheit => 32.0 
+0

謝謝@LazyMonkey,我明白你要去哪裏。我欣賞提示,但是當我嘗試並運行它時,通過了我得到的測試: 對於{:f => 50}的未定義方法'*':散列 #.08_temperature_object/temperature.rb:13:in'in_fahrenheit ' #.08_temperature_object/temperature_object_spec.rb:27 任何想法可能會導致什麼? – PaperKraftMike 2013-03-02 04:18:19

+0

不清楚你是指你的原始類還是我的mods。我猜你的RSpec測試對你的#in_fahrenheit方法有問題,因爲你把{:f}定義爲一個方法參數。這看起來不對(它只是括號內的符號,而不是:key =>值對)。不確定這是否是有效的Ruby語法(我無法通過!)請發佈&格式化您的溫度類。 – LazyMonkey 2013-03-02 17:09:46