我在定义rspec文件时使用的结构(基于我对rspec所做的阅读)是您使用describes
来描述特定功能,并且context
通过函数来讨论状态和/或路径的特定上下文。
Example类:
class MyClass
def self.my_class_method(bool)
if bool == true
return "Yes"
else
return "No"
end
end
def my_instance_method
today = Date.today
if today.month == 2 and today.day == 14
puts "Valentine's Day"
else
puts "Other"
end
end
end
正如你所看到的,我定义一个类的方法和做真的很傻和随机函数实例方法。但重点在于:类方法会根据参数做一些不同的事情,实例方法会根据一些外部因素做一些不同的事情:您需要测试所有这些,并且这些方法不同上下文。但我们将描述为 rspec文件中的函数。
Rspec的文件:
describe MyClass do
describe ".my_class_method" do
context "with a 'true' argument" do
it "returns 'Yes'." do
MyClass.my_class_method(true).should eq "Yes"
end
end
context "with a 'false' argument" do
it "returns 'No'." do
MyClass.my_class_method(false).should eq "No"
end
end
end
describe "#my_instance_method" do
context "on Feb 14" do
it "returns 'Valentine's Day'." do
Date.stub(:today) { Date.new(2012,2,14) }
MyClass.new.my_instance_method.should eq "Valentine's Day"
end
end
context "on a day that isn't Feb 14" do
it "returns 'Other'." do
Date.stub(:today) { Date.new(2012,2,15) }
MyClass.new.my_instance_method.should eq "Other"
end
end
end
end
所以,你可以看到describe
是说你描述的方法,并在你的类中的方法的名称相匹配。 context
用于评估方法可以调用的不同条件,或者影响方法工作方式的不同状态。
希望这会有所帮助!
谢谢,给了我一个清晰的认识。 – user1568617 2012-08-02 13:31:56
不客气! – MrDanA 2012-08-02 14:31:30
+1这也正是我这样做的方式 – severin 2012-08-02 15:01:35