Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ruby-on-rails/63.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Rspec试验可比<=&燃气轮机;_Ruby On Rails_Ruby_Rspec_Mocking_Stub - Fatal编程技术网

Ruby on rails Rspec试验可比<=&燃气轮机;

Ruby on rails Rspec试验可比<=&燃气轮机;,ruby-on-rails,ruby,rspec,mocking,stub,Ruby On Rails,Ruby,Rspec,Mocking,Stub,我有一个使用Comparable的模型,我已经为此实现了所需的方法。我应该如何测试这个w/rspec(我知道这不是TDD,因为我已经实现了这个方法) 等级1) g2.存根(:sort_key=>2) g3.存根(:sort_key=>1) 结束 它“调用sort_key”do Grade.any_实例。应_接收(:sort_key) g1

我有一个使用
Comparable
的模型,我已经为此实现了所需的
方法。我应该如何测试这个w/
rspec
(我知道这不是TDD,因为我已经实现了这个方法)

等级
使用存根进行测试。又快又容易

describe Grade do
  context "<=>" do
    before do
      g1 = Grade.new
      g2 = Grade.new
      g3 = Grade.new
      g1.stub(:sort_key=>1)
      g2.stub(:sort_key=>2)
      g3.stub(:sort_key=>1)
    end

    it "calls sort_key" do
      Grade.any_instance.should_receive(:sort_key)
      g1 < g2
    end

    it "works for comparing" do
      expect{g1<g2}.to be_true
      expect{g2>g1}.to be_true
      expect{g1=g3}.to be_true
    end
  end
end
描述等级do
上下文“”do
在做之前
g1=新等级
g2=新等级
g3=新等级
g1.存根(:sort_key=>1)
g2.存根(:sort_key=>2)
g3.存根(:sort_key=>1)
结束
它“调用sort_key”do
Grade.any_实例。应_接收(:sort_key)
g1
鉴于以下
等级
实施:

class Grade
  attr_reader :sort_key
  def initialize(sort_key)
    @sort_key = sort_key
  end
  def <=>(other)
    return nil unless other.respond_to?(:sort_key)
    @sort_key <=> other.sort_key
  end
end
等级
属性读取器:排序键
def初始化(排序_键)
@排序键=排序键
结束
def(其他)
除非另有说明,否则返回nil。响应(:排序键)
@排序\u键其他。排序\u键
结束
结束
我只想根据for
对象#
的说明,测试
等级#
的行为是否正常:

# comparable_grade.spec
describe "Grade#<=>" do

  it "returns 0 when both operands are equal" do
    (Grade.new(0) <=> Grade.new(0)).should eq(0)
  end

  it "returns -1 when first operand is lesser than second" do
    (Grade.new(0) <=> Grade.new(1)).should eq(-1)
  end

  it "returns 1 when first operand is greater than second" do
    (Grade.new(1) <=> Grade.new(0)).should eq(1)
  end

  it "returns nil when operands can't be compared" do
    (Grade.new(0) <=> Grade.new("foo")).should be(nil)
    (Grade.new(0) <=> "foo").should be(nil)
    (Grade.new(0) <=> nil).should be(nil)
  end

  it "can compare a Grade with anything that respond_to? :sort_key" do
    other = double(sort_key: 0)
    (Grade.new(0) <=> other).should eq(0)
  end

end
#可比_等级规范
描述“等级#”是什么
它“当两个操作数相等时返回0”do
(等级。新(0)等级。新(0))应等于(0)
结束
它“当第一个操作数小于第二个操作数时返回-1”do
(等级。新(0)等级。新(1))应等于(-1)
结束
它“第一个操作数大于第二个操作数时返回1”do
(等级。新(1)等级。新(0))应符合等式(1)
结束
它“无法比较操作数时返回nil”do
(等级。新(0)等级。新(“foo”)。应为(零)
(新(0)级“foo”)应为(零)
(新等级(0)零)。应为(零)
结束
它“可以将分数与任何响应的内容进行比较?”:sort\u key“do”
其他=双精度(排序键:0)
(新等级(0)其他)。应符合等式(0)
结束
结束

在编写测试之前,我不会因为编写这样一个琐碎的方法而责骂你自己。重要的是要有测试,而不一定是如何实现的。即使这很琐碎,我还是希望看到人们会如何看待测试,因为我是一个测试新手。我的意思是,你写了一个方法,这不是什么大问题,不像说,写一个大型应用程序,然后尝试编写测试。
# comparable_grade.spec
describe "Grade#<=>" do

  it "returns 0 when both operands are equal" do
    (Grade.new(0) <=> Grade.new(0)).should eq(0)
  end

  it "returns -1 when first operand is lesser than second" do
    (Grade.new(0) <=> Grade.new(1)).should eq(-1)
  end

  it "returns 1 when first operand is greater than second" do
    (Grade.new(1) <=> Grade.new(0)).should eq(1)
  end

  it "returns nil when operands can't be compared" do
    (Grade.new(0) <=> Grade.new("foo")).should be(nil)
    (Grade.new(0) <=> "foo").should be(nil)
    (Grade.new(0) <=> nil).should be(nil)
  end

  it "can compare a Grade with anything that respond_to? :sort_key" do
    other = double(sort_key: 0)
    (Grade.new(0) <=> other).should eq(0)
  end

end