2013-03-01 70 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