2011-02-21 44 views
1

On Rails的2.3.2我試圖在功能測試Rails的功能測試assert_select覺得沒有什麼AJAX後發佈

def test_view 
get :form 
xhr :post, :add_to_cart, {:id => 1} 
post :create, {:param => value} 
assert_select 'title', 'Success!' 
end 

測試的視圖,但總是收到一個錯誤:

預計至少要1元素匹配「標題」,找到0. 不正確。

據我所知,你不能在xhr調用後使用'assert_select',但在這種情況下,我會在普通的post請求後執行它。

如果我把XHR請求

def test_view 
get :form 
post :create, {:param => value} 
assert_select 'title', 'Success!' 
end 

然後它就像魅力。 我可以手動設置購物車(我在會話中存儲),但後來我不會真的測試視圖...

任何想法?

回答

0

我想你已經想通了 - 功能測試期望單個控制器動作,而不是多個動作。我建議用integration test替換這個。

+0

您可以使用功能測試來測試儘可能多的動作。這是有道理的,如果你想檢查一個動作是否成功,即post:update,get:show,format :: json –

0

如果您提出xhr請求,則@response.content_type == 'text/javascript'assert_select將不起作用。爲了得到它的工作,你必須將內容類型更改爲'text/html',像這樣:

xhr(:get, something) 
@response.content_type = 'text/html' 
assert_select 'title', 'Success!' 
+0

如果這仍然有效,我想知道爲什麼。當我查看返回的文本時,它不是HTML,而是一個巨大字符串中帶有HTML的JavaScript。 – Trejkaz

0

我有同樣的問題。如上所述,它來自ActionController,將content-type設置爲text-javascript,而assert_selecttext/html一起使用。更好的方法來設置它雖然不是在測試與@response打成一片,但在控制器中,像這樣:

respond_to do |format| 
    format.html {...} 
end 

這將迫使內容類型text/html

相關問題