2011-10-29 8 views
0

ここには、ArticleCategoryモデルがあります。明らかに記事は1つのカテゴリに属しています。AJAX Rails 3アプリケーションのテストコントローラにはどのようにアプローチすればよいですか?

新しい記事のフォームに新しいカテゴリを作成するオプションが必要なので、AJAXを使用することにしました。フォームはとてもシンプルに見えます。私は、例えば、うまく動作するように思われる、as described in Ryan Bates' screencast、要求スペックを経由して統合テストを使ってきたCategoriesController

class CategoriesController < ApplicationController 
    respond_to :js 

    def create 
    @category = Category.new(params[:category]) 
    @saved = @category.save 
    end 
end 

create.js.coffeeビューテンプレート

if <%= @saved %> 
    $('#category_name').val '' 
    new_option = $("<option value='<%= @category.id %>'><%= @category.name %></option>").attr('selected', 'selected') 
    $('select#article_category_id').append(new_option).focus() 
else 
    alert "Category already exists" 
    $('#category_name').val('').focus()  

と同じ

<%= form_for @category, :method => :post, :remote => true do |f| %> 
    <p> 
     <%= f.label :name %> 
     <%= f.text_field :name %> 
    </p> 

    <p class="button"><%= f.submit %></p> 
<% end %> 

it "supports js", :js => true do 
    visit new_article_path 
    fill_in "category_name", :with => "foobar" 
    click_button "Add category" 
    page.should have_content("foobar") 
end 

事があり、コントローラは.js.coffeテンプレートを使用して応答しているので、私は本当にビューのスペックを持つことはできません。 リクエスト仕様があるときにコントローラをテストするのに気を付けるべきでしょうか?

質問の第2部分です。 コントローラーからの応答として.js.coffeeテンプレートを使用することをお勧めしますか?私はちょうどhttpステータスコードまたはJSONを返すべきではなく、すべての応答を実行するJavaScriptを生成するのではなく、クライアント側のすべてを処理するべきではありませんか?

答えて

1

1)リクエスト仕様は、jsの結果をテストするためのものです。したがって、コントローラが正しい値を返すようにコントローラをテストする必要がありますjs.coffee

2)これは本当に味の問題です。私は本当にjson +クライアントサイドのjsを使用することを好む:それはよりスケーラブルです。しかし、Railsのテンプレートは印象をより整然としたコードにすることができます。

関連する問題