2011-01-23 96 views
2

我想我應該最終爲我的Rails應用程序編寫一些測試。軌道控制器測試,獲取ActionView :: MissingTemplate:缺少模板

我的控制器是「UsersController」。它沒有任何HTML,因爲我只有一個iphone應用程序發送一個帖子到軌道控制器。

這裏是我的測試:

require 'test_helper' 

class UsersControllerTest < ActionController::TestCase 


    def test_create 
    # to http post 
    # /users 
    #user[email]=%@&user[password]=%@&user[password_confirmation]=%@ 
    #post 
    post(:create, :user => {:password => "testpassword", :password_confirmation => "testpassword"}) 
    end 

問題是,我得到這個錯誤:

1)錯誤: test_create(的UsersControllerTest): ::的ActionView MissingTemplate:缺少模板用戶/新用{:handlers => [:erb,:rjs,:builder,:rhtml,:rxml],:formats => [:html],:locale => [:en,:en]}

所以我想它試圖填充一個HTML頁面?如果是這樣,我覺得這很奇怪。我認爲它會直接向控制器發佈信息。有人可以確認這個「post」方法試圖填充HTML表單嗎?

如果是這種情況,我應該如何着手編寫一個測試,直接發送HTTP POST到控制器?

感謝所有幫助

回答

1

除非你告訴它,否則post方法假設所請求的內容類型是HTML。通常情況下,create動作看起來是這樣的:

@user = User.new(params[:user]) 
if @user.save 
    redirect_to posts_path 
else 
    render :new 
end 

如果操作失敗則嘗試使「用戶/新」,它不存在,因此錯誤。

所以這裏有幾個問題。目前還不清楚什麼樣的內容類型(XML?)。行動失敗,但我們不明白爲什麼。編輯問題可能有助於向我們展示控制器操作的功能。

6

您可以指定「格式」,使其工作:

post(:action, {'param1'=>'value1', 'param2' => 'value2', :format => 'js'}) 
+0

我正在做一個ajax後到控制器這是返回的JavaScript。指定格式爲JS解決了我的問題 - 感謝提示。 – 2013-10-29 21:53:12