2012-08-02 33 views
1

我有一个基本的疑问。 如果RSpec的文件包含许多上下文:rspec中的上下文

describe Name do 
context "number1" do 
....... 
....... 
end 
context "number 2" do 
....... 
....... 
end 
context "number 3" do 
....... 
....... 
end 

应该如何从每个上下文的功能,在名为.rb文件中描述?他们应该在同一班还是不同班?有没有我可以阅读的书籍来提高我对这方面的知识?

回答

8

我在定义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用于评估方法可以调用的不同条件,或者影响方法工作方式的不同状态。

希望这会有所帮助!

+0

谢谢,给了我一个清晰的认识。 – user1568617 2012-08-02 13:31:56

+0

不客气! – MrDanA 2012-08-02 14:31:30

+0

+1这也正是我这样做的方式 – severin 2012-08-02 15:01:35

相关问题