Как мне подходить к тестированию контроллеров в приложении AJAX Rails 3? - PullRequest
0 голосов
/ 29 октября 2011

Вот в чем дело, у меня есть модели 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 для выполнения каждого ответа?

1 Ответ

1 голос
/ 30 октября 2011

1) Запросите спецификацию здесь, чтобы проверить результат вашего js. Поэтому вы должны проверить свой контроллер, чтобы убедиться, что он возвращает правильные значения в js.coffee

2) Это действительно вопрос вкуса. Я действительно предпочитаю использовать json + на стороне клиента js: это более масштабируемо. Но шаблоны Rails могут создать впечатление более организованного кода.

...