RSPEC测试和Ruby对象

时间:2013-03-01 15:49:49

标签: ruby rspec

所以我正在尝试编写一些代码来为Ruby进行RSPEC测试。但即使让第一个测试通过,我也遇到了一些麻烦。我想如果我能对此有所帮助,我将能够得到余下的。但我可以发布其余的测试,如果这样可以更容易提供建议。

所以它正在构建一个华氏度/摄氏度转换器,但使用对象和类而不是仅定义几个方法来进行转换。

第一部分看起来像这样

   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

说明中的一个提示是,Temperature对象构造函数应该接受带有:celsius或:fahrenheit条目的选项哈希。

任何帮助或提示将不胜感激。过去几周我一直坚持这个测试。提前致谢。

1 个答案:

答案 0 :(得分:1)

我认为你的温度等级需要一些工作。为什么没有可以设置Temperature对象基值的'scale'属性?

以下是您发布内容的修改版本:

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时无需创建新的Temperature对象。您可以使当前对象将数字(存储在属性中)转换为华氏度。您可以在创建对象时添加温度信息:

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