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