2012-05-27 88 views
0

我剛剛開始使用RSpec,並試圖做一些相當微不足道的事情,但我無法找到任何好的文檔來做這件事。我想測試一系列事件,說兩個用戶之間的友誼。使用RSpec測試事件序列

我的規格是:

describe User do 

    describe "friendships" do 
    describe ".friends?" do 
     before do 
     @user1 = FactoryGirl.build(:user) 
     @user2 = FactoryGirl.build(:user) 
     end 

     it "should be false for non friends" do 
     @user1.friends?(@user2).should be false 
     @user2.friends?(@user1).should be false 
     end 

     it "should be false for requested friendship" do 
     Friendship.create(:user_id => @user1.id, :friend_id => @user2.id) # 1 
     @user1.friends?(@user2).should be false 
     @user2.friends?(@user1).should be false 
     end 

     it "should be true for accepted friendship" do 
     Friendship.for_users(@user1, @user2).update_attribute(:approved, true) # 2 
     @user1.friends?(@user2).should be true 
     @user2.friends?(@user1).should be true 
     end 
    end 

    end 
end 

我創建在行友誼標# 1,並期望它出現在行# 2,但我猜測數據庫中獲取兩者之間沖洗英寸

這是測試這種事件流的錯誤方式嗎?我該怎麼做?任何指針將不勝感激。

回答

-1

我猜你正在尋找context 。事情是這樣的:

context "when friends" do 
    before { Friendship.create ... } 

    it "should be false for requested friendship" 

    it "should be true for accepted friendship" 
end 

抱歉地說,但你應該看看在rspec的文檔:basic structure (describe/it)

+0

在這種情況下,第一個和第二個之間的變化會持續嗎? – zsquare

+0

不,它只是爲每個示例執行'before'塊。 –

+0

但正如我在我的問題中提到的,友誼對象的狀態變化,以便從請求接受。在這種情況下,上下文有什麼幫助? – zsquare

1

是的,數據庫在事件流之間被刷新。

測試的最佳方法是讓每個測試都設置好需要的東西,然後在測試結束後將其扔掉。這樣每個測試都是完全獨立的,所以你不必依賴以前的測試。

您可以考慮只是建立在工廠女孩的友誼,然後測試的友誼存在,然後通過在集成測試的UI讓人朋友和檢查同樣的事情

+0

廢話。我很確定有一些我錯過了。 – zsquare