2013-08-29 31 views
0

我看邁克爾·哈特爾的Rails的教程,在章9.2.2,哈特爾說,我們不能使用水豚直接發出看跌/補丁請求到模型,爲什麼水豚不能直接提交行動?

這是測試代碼:

describe "for wrong users" do 
    let(:user) { FactoryGirl.create(:user) } 
    let(:wrong_user) { FactoryGirl.create(:user, email: "[email protected]") } 
    before { valid_signin user} 

    describe "when submitting a PATCH request to users#update" do 
    before { patch user_path(wrong_user) } 
    specify { expect(response).to redirect_to root_path} 
    end 
end 

和valid_signin是這樣,intially:

def valid_signin(user, options = {}) 
    visit signin_path 
    fill_in "Email", with: user.email 
    fill_in "Password", with: user.password 
    click_button "Sign in" 
end 

這些試驗不工作,當我們發出PUT請求,我們不能使用水豚做到這一點。

那麼是這樣嗎?我們不能用水豚來測試任何放置/修補請求嗎?當我們需要測試put/patch請求並且我們不能使用水豚時,我們應該做些什麼?

回答

2

水豚是行爲驅動程序開發。誰的行爲?人類。

人可以patch?他可以put?他不能。只有電腦可以。

人可以visitfill_inclick_button?是的,他可以。這是水豚的。底線,將計算機的動作放入單元測試和控制器測試中,模仿人類在由水豚進行的集成測試中。

+0

是的,我很困惑,因爲在railstutorial中,這是在集成測試中完成的。 – falloutx

+0

嗨,我剛纔讀了你的答案,但在這種情況下,不能理解水豚和valid_signin之間的關係!爲什麼valid_signin不起作用?它在「補丁」之前被調用? – medBo

+0

@medBo,問題不是'valid_signin',而是'patch user_path(wrong_user)'。你不能在水豚中使用PATCH,GET,POST等。 –