2010-10-31 47 views
0

聯繫has_many筆記;筆記屬於聯繫人。在我的筆記控制器,成功後保存注意的,我重定向到音符的接觸使用:Rails單元測試 - 無法重定向到零!

format.html { redirect_to(@note.contact, :notice => 'Note was successfully created.') } 

在我的單元測試,我測試創建一個音符,然後重定向到音符的聯繫人視圖的能力頁。我的notes.yml夾具只是簡單地設置筆記,在notes_controller_test.rb的設置部分,我將夾具的筆記分配給@note。

下面是實際測試代碼:

test "should create note" do 
    assert_difference('Note.count') do 
    post :create, :note => @note.attributes 
    end 
end 

我想說明是成功保存,但重定向失敗。所以它看起來像控制器中的redirect_to正在拋出「無法重定向到零!」錯誤,但我似乎無法理解爲什麼。

這裏是我的筆記創建行動:

def create 
@note = Note.new(params[:note]) 

respond_to do |format| 
    if @note.save 
    format.html { redirect_to(@note.contact, :notice => 'Note was successfully created.') } 
    format.xml { render :xml => @note.contact, :status => :created, :location => @note.contact } 
    else 
    format.html { render :action => "new" } 
    format.xml { render :xml => @note.contact.errors, :status => :unprocessable_entity } 
    end 
end 

+0

我們需要您的創建操作,因爲它似乎是您的操作不會創建您的筆記。您也可以在日誌中看到您在帖子中獲得的內容。 – shingara 2010-10-31 15:30:39

+0

已添加。我也會檢查日誌,看看我能否看到任何東西。 – Steve 2010-10-31 18:49:03

回答

2

這樣看來,您的燈具沒有創建和/或裝上@note接觸。拋出'redirect to nil',因爲@ note.contact返回nil。確保你的筆記的contact_id是有效的,並且在測試運行之前,該筆記是通過它的聯繫人從數據庫加載的。

+0

所以我應該在notes_controller_test.rb中的設置操作中創建一個新的聯繫人?我假設fixtures在測試運行時自動加載到測試數據庫中,所以如果我的聯繫人夾具有兩個入口,那麼這兩個聯繫人將可用於我的測試ID爲1和2.是否有錯? – Steve 2010-10-31 18:50:32

+0

哦!在我的接觸夾具中,我沒有聲明ID。這只是名字和姓氏。所以測試實際上是給它一個瘋狂的ID,與我筆記夾具中的contact_id字段不一致。 – Steve 2010-10-31 18:52:30

+0

賽程可能會是一種痛苦。檢查機械師或FactoryGirl尋求更好的方法。我已經用好了,我更喜歡機械師。花一個小時,並瞭解它。完全值得您一段時間。 http://github.com/notahat/machinist – 2010-10-31 19:14:21

0

當我添加我的聯繫人燈具時,在聲明值時我沒有指定ID。我簡單地說:

one: 
    firstname: John 
    lastname: doe 

我已經添加了一個id字段到夾具和測試通過。甜! :)謝謝你指出我在正確的方向。它看起來好像你沒有指定一個特定的ID,那麼它會給它一個瘋狂的長隨機ID(見test.log)。

有沒有辦法給它一個ID,將它連接到便條夾具而不硬編碼那裏呢?

one: 
    firstname: John 
    lastname: doe 

然後在我的筆記夾具:

one: 
    body: This is a note text. 
    contact_id: <%= contacts(:one).id %> 

將這項工作?

相關問題