Вот в чем дело, у меня есть модели Article
и Category
, где, очевидно, статья относится к одной категории.
Я хочу иметь возможность создать новую категорию в форме новой статьи, поэтому я решил использовать AJAX. Форма выглядит очень просто.
<%= 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 %>
так же, как 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()
Я использовал интеграционное тестирование через спецификации запросов, , как описано в скринкасте Райана Бейтса , который, кажется, прекрасно работает, например,
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
, поэтому я не могу иметь спецификации просмотра. Должен ли я вообще беспокоиться о тестировании контроллеров, когда у меня есть спецификации запросов?
И вторая часть вопроса. Является ли хорошей практикой использование .js.coffee
шаблонов в качестве ответа от контроллера? Разве я не должен просто возвращать код состояния http или некоторый JSON и обрабатывать все это на стороне клиента вместо генерировать JavaScript для выполнения каждого ответа?