2012-08-12 82 views
3

我試圖學習如何測試與Rspec。測試存在和belongs_to與Rspec

目前,我有一個項目類規格:

require 'spec_helper' 

describe Item do 
    it { should belong_to :list } 

    before(:each) do 
    @item = FactoryGirl.create(:item) 
    end 

    subject { @item } 

    it { should respond_to :name } 
    it { should validate_presence_of :name } 

end 

我有幾個關於這個問題,雖然。

it { should validate_presence_of :name }一樣寫:

describe "when name is not present" do 
    before { @item.name = "" } 
    it { should_not be_valid } 
end 

或者是兩者之間有一個關鍵的區別?

我也想知道it { should belong_to :list }是否值得在規範中編寫,或者如果有更好的方法。我可以做@item = FactoryGirl.build(:item)FactoryGirl.create(:item)。是否創建將項目保存到測試數據庫並且不生成?或者我在這裏困惑。我應該什麼時候使用哪個?

謝謝。

回答

7

我猜你正在使用shoulda-matchers或類似的東西。他們有優勢(我認爲)他們爲您提供簡短的匹配器,就像您使用的一樣。

個人而言,我認爲以下測試:

it { should belong_to :list } 
it { should validate_presence_of :name } 

是重要的,因爲最有可能我的類將如下所示:

class Item 
    belongs_to :list 
    validate_presence_of :name 
end 

如果有人修改任何該等線的,它會顯示在測試中。

因此,他們確實值得編寫一個規範,而且它也沒有太多工作要做。

其次:是的,should validate_presence_of確實與更大的形式類似,但我發現更短的形式更具表達力。請使用簡寫!

第三:FactoryGirl差異:

  • 使用FactoryGirl.create如果對象需要在數據庫中,例如存在因爲你想測試你的控制器可以檢索項目。
  • 使用FactoryGirl.build如果您只需要一個對象,並且不需要該對象存在於數據庫中。不保存對象到數據庫將使您的測試更快。

希望這會有所幫助。

+0

謝謝。我的確在使用shoulda-matchers。我會用短表格! :) – cabaret 2012-08-12 17:56:14