2013-07-09 57 views
0

我在一個頁面中插入一個用戶(一個頁面有很多用戶通過成員表),並且我期望它失敗,因爲需要角色。我在用戶,頁面和成員資格角色(連接表)上都有validate_presence_of。如何測試插入一個has_many關係與規範?

我的問題是測試在到達結尾之前會中斷,因爲引發了異常。所以我想,我會添加一個「期望提高」它

it 'should not be valid without a role' do 
    user = FactoryGirl.build(:user) 
    expect { page.users << user }.to raise_error(ActiveRecord::RecordInvalid) 
end 

但是這並沒有真正的測試,該錯誤是由缺少角色(驗證錯誤:沒有提供任何角色)引起的。有沒有更好的方法來測試這個?或者有沒有辦法在page.users中設置用戶而不保存它,然後檢查頁面是否有效?

更新:

這不工作,要麼(拋出異常的page.users < <用戶,無效的活動記錄,必須提供角色):

it 'should not be valid without a role' do 
    user = FactoryGirl.build(:user) 
    page.users << user 
    page.should have(1).error_on :role 
end 

更新2:

我想我有答案,現在可以使用

it 'should not be valid without a role' do 
    user = FactoryGirl.build(:user) 
    expect { page.users << user }.to raise_error(ActiveRecord::RecordInvalid, /Role must be provided/) 
end  
+0

請告訴我們什麼'頁面'也是 –

回答

1

您應該檢查Shoulda-matchers寶石。

您也可以嘗試使用語法:

it { should have(1).error_on :role } 

基本上你可以訪問錯誤,從你的規範,可以檢查是否有一個對你想有一個領域。

+0

我已經這樣做了,並添加了validate_uniqueness_of,但因爲我直接在頁面中注入用戶並保存它(page.users << user),它會引發驗證錯誤,在它到達shoulda的驗證檢查之前。 – Jareish

+0

然後更新了我的答案。 –

+0

它永遠不會到達那條線,因爲page.users <<用戶拋出一個ActiveRecord :: RecordInvalid Valdation失敗:角色必須被提供異常。 – Jareish