2013-08-29 15 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等。 –