2011-03-05 153 views
2

我正在創建一個與數據庫交互的GUI應用程序,因此我需要用於我的RSpec測試的燈具管理。我使用sqlite數據庫,並將編寫一個類,它將使用直接的SQL來操作數據。我需要測試它的數據庫交互功能。是否可以在不使用Rails的情況下使用FactoryGirl?

我找不到它可以做2個基本的東西,任何圖書館當我運行RSpec的測試:

  1. 清除數據庫或特定表中它
  2. 負載特定的數據到它,所以我可以使用該數據在我的測試

已經有數以萬計的博客文章和手冊中清楚地解釋如何使用FactoryGirl與任何版本的Rails,但沒有一個沒有它。我開始挖掘周圍,這是我(請注意,我不使用軌道和它的組成部分):

spec/note_spec.rb:

require 'spec_helper' 
require 'note' 

describe Note do 
    it "should return body" do 
    @note = Factory(:note) 
    note.body.should == 'body of a note' 
    end 
end 

spec/factories.rb:

Factory.define :note do |f| 
    f.body 'body of a note' 
    f.title 'title of a note' 
end 

lib/note.rb:

class Note 
    attr_accessor :title, :body 
end 

當我運行rspec -c spec/note_spec.rb我得到以下:

F 

Failures: 

    1) Note should return body 
    Failure/Error: @note = Factory(:note) 
    NoMethodError: 
     undefined method `save!' for #<Note:0x8c33f18> 
    # ./spec/note_spec.rb:6:in `block (2 levels) in <top (required)>' 

問題:

  1. 是否有可能在所有使用FactoryGirl沒有護欄及護欄加載ActiveModel一樣/ ActiveRecord的庫?
  2. 因爲FactoryGirl正在尋找save!方法,是否必須繼承我的Note課程?
  3. 除了FactoryGirl還有其他更可行的解決方案嗎?

我完全新的到Ruby/RSpec的/ BDD,所以任何幫助將不勝感激;)

回答

9

默認情況下factory_girl將創建保存的實例。如果您不想將對象保存到數據庫,則可以使用build方法創建未保存的實例。

require 'spec_helper' 
require 'note' 

describe Note do 
    it "should return body" do 
    @note = Factory.build(:note) 
    note.body.should == 'body of a note' 
    end 
end 

看到Getting Started file 「使用工廠」。

+0

是的,「構建」似乎工作。所以FG期望我的課程實現'save!'方法? – galymzhan 2011-03-20 13:52:56

+0

這是正確的;請參閱[create]的文檔(http://rubydoc.info/gems/factory_girl/1.3.3/Factory#create-class_method)。 – 2011-03-20 19:58:13

+0

你會爲協會做些什麼? – 2013-10-22 00:16:18

相關問題