Everyday-rails-rspec - 預(yù)構(gòu)件和固件

固件:Rails 默認(rèn)提供了快速生成示例數(shù)據(jù)的工具,叫做“固件”墨吓。
固件是一個(gè)yaml格式的文件范删,可以用來(lái)生成示例數(shù)據(jù)。
例如下面是一個(gè)Contactmodel的固件:

# contact.yml
aaron: 
  firstname: "Aaron" 
  lastname: "Sumner" 
  email: "aaron@everydayrails.com"
john: 
  firstname: "John" 
  lastname: "Doe" 
  email: "johndoe@nobody.org"

在測(cè)試中恃锉,我們使用contact(:aaron),就會(huì)得到一個(gè)聯(lián)系人隔盛。

固件有兩個(gè)問(wèn)題我是極力避免的:

  • 固件中的數(shù)據(jù)很容易被破壞(這意味著要花費(fèi)與編寫測(cè)試和應(yīng)用代碼相等的時(shí)間維護(hù)測(cè)試數(shù)據(jù));
  • Rails 在把固件中的數(shù)據(jù)存入“測(cè)試數(shù)據(jù)庫(kù)”時(shí)會(huì)跳過(guò) Active Record層。這意味著很多重要的操作,例如模型的數(shù)據(jù)驗(yàn)證,會(huì)被忽略朗儒。這樣可不好颊乘。

預(yù)構(gòu)件:簡(jiǎn)單靈活地創(chuàng)建測(cè)試數(shù)據(jù)。Factory Girl這個(gè)工具不像固件那么容易破壞,方便使用,生成的測(cè)試數(shù)據(jù)也很可靠醉锄。
缺點(diǎn)

  • 會(huì)降低測(cè)試速度

在應(yīng)用中使用預(yù)構(gòu)件

在spec文件夾下創(chuàng)建factories/contacts.rb并寫入下面的代碼

FactoryGirl.define do
    factory :contact do
        firstname "John"
        lastname "Doe"
        sequence(:email) { |n| "johndoe#{n}@example.com"}
    end
end

** sequence是FactoryGirl提供的一個(gè)功能乏悄,每調(diào)用一次,n的值都會(huì)+1**

*** 只要模型中有唯一性驗(yàn)證恳不,都可以使用sequence(序列)***

測(cè)試代碼:

require 'rails_helper'

describe Contact do  
  it 'has a valid build' do 
    expect(FactoryGirl.build(:contact)).to be_valid
  end  
  it 'is invalid without a firstname' do
    contact = FactoryGirl.build(:contact, firstname: nil)                       contact.valid?
    expect(contact.errors[:firstname]).to include("can't be blank")  
  end    

  it 'is invalid with a duplicate email address' do    
    FactoryGirl.create(:contact, email: 'fgcui@outlook.com')  
    contact = FactoryGirl.build(:contact,email:'fgcui@outlook.com')
    contact.valid?     
    expect(contact.errors[:email]).to include("has already been taken")
  end
end

*** FactoryGirl.build 的 作 用 是 在 內(nèi) 存 中 存 儲(chǔ) 一 個(gè) 新 測(cè) 試 對(duì) 象;FactoryGirl.create 的作用是把對(duì)象永久存儲(chǔ)到應(yīng)用的測(cè)試數(shù)據(jù)庫(kù)中檩小。***

生成更真實(shí)的虛擬數(shù)據(jù)-Faker

這里我們介紹一個(gè)虛擬數(shù)據(jù)生成工具Faker.
使用Faker之后我們的factories的代碼就變成了下面的樣紙。它會(huì)生成看起來(lái)更真實(shí)的測(cè)試數(shù)據(jù)

FactoryGirl.define do
    factory :contact do
       firstname { Faker::Name.first_name } 
       lastname { Faker::Name.last_name } 
       email { Faker::Internet.email }
    end
end
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末烟勋,一起剝皮案震驚了整個(gè)濱河市规求,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌卵惦,老刑警劉巖阻肿,帶你破解...
    沈念sama閱讀 219,427評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異沮尿,居然都是意外死亡丛塌,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,551評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)赴邻,“玉大人印衔,你說(shuō)我怎么就攤上這事≌С” “怎么了当编?”我有些...
    開封第一講書人閱讀 165,747評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)徒溪。 經(jīng)常有香客問(wèn)我忿偷,道長(zhǎng),這世上最難降的妖魔是什么臊泌? 我笑而不...
    開封第一講書人閱讀 58,939評(píng)論 1 295
  • 正文 為了忘掉前任鲤桥,我火速辦了婚禮,結(jié)果婚禮上渠概,老公的妹妹穿的比我還像新娘茶凳。我一直安慰自己,他們只是感情好播揪,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,955評(píng)論 6 392
  • 文/花漫 我一把揭開白布贮喧。 她就那樣靜靜地躺著,像睡著了一般猪狈。 火紅的嫁衣襯著肌膚如雪箱沦。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,737評(píng)論 1 305
  • 那天雇庙,我揣著相機(jī)與錄音谓形,去河邊找鬼。 笑死疆前,一個(gè)胖子當(dāng)著我的面吹牛寒跳,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播竹椒,決...
    沈念sama閱讀 40,448評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼童太,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了胸完?” 一聲冷哼從身側(cè)響起书释,我...
    開封第一講書人閱讀 39,352評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎舶吗,沒(méi)想到半個(gè)月后征冷,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體择膝,經(jīng)...
    沈念sama閱讀 45,834評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡誓琼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,992評(píng)論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片腹侣。...
    茶點(diǎn)故事閱讀 40,133評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡叔收,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出傲隶,到底是詐尸還是另有隱情饺律,我是刑警寧澤,帶...
    沈念sama閱讀 35,815評(píng)論 5 346
  • 正文 年R本政府宣布跺株,位于F島的核電站复濒,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏乒省。R本人自食惡果不足惜巧颈,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,477評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望袖扛。 院中可真熱鬧砸泛,春花似錦、人聲如沸蛆封。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,022評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)惨篱。三九已至盏筐,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間妒蛇,已是汗流浹背机断。 一陣腳步聲響...
    開封第一講書人閱讀 33,147評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留绣夺,地道東北人吏奸。 一個(gè)月前我還...
    沈念sama閱讀 48,398評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像陶耍,于是被迫代替她去往敵國(guó)和親奋蔚。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,077評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 這是一個(gè)簡(jiǎn)單的關(guān)于Rails Rspec的簡(jiǎn)單的介紹 1 安裝Rspec 在Rails的配置文件Gemfile配置...
    AQ王浩閱讀 26,984評(píng)論 6 28
  • 老習(xí)慣烈钞,列出本文參考的文檔和博客泊碑,致以崇高的敬意1.FactoryGirl: http://www.jianshu...
    嚴(yán)三金閱讀 1,924評(píng)論 1 50
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)毯欣,斷路器馒过,智...
    卡卡羅2017閱讀 134,672評(píng)論 18 139
  • 1.caching with instance variables2.dynamic find_by method...
    Jayzen閱讀 1,376評(píng)論 0 1
  • 2014-04-06 量?jī)r(jià)齊升 ——小城散漫表達(dá)系列之“升” 火山 有個(gè)熟悉的微友,轉(zhuǎn)來(lái)一組信息酗钞,“我一直有個(gè)錯(cuò)誤...
    朱明云閱讀 176評(píng)論 0 1