2012-08-02 73 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