Эти характеристики контроллера достаточно хороши? - PullRequest
1 голос
/ 06 июля 2011

Я новичок в тестировании контроллеров с RSpec. В моем контроллере у меня есть следующие методы:

  def edit
    @widget = Widget.find(params[:id])
    if @widget.present?
      @all_widgets = Widget.where(:id != @widget.id).select("id, title")
      wfs @widget.id
    else
      redirect_to widgets_url
    end
  end

и

  def wfs widget_id
    @all_features,
    @existing_features,
    @draft_features,
    @imported_features  = WidgetFeature.find_by_widget_id_group_by_status(widget_id)
  end

Я протестировал метод WidgetFeature.find_by_widget_id_group_by_status(widget_id) в соответствующей модели.

Теперь я не знаю, как проверить метод edit и что проверить. Я знаю все о пнях, издевательствах и двойниках. Я следую предписаниям по тестированию Rails и книге RSpec . Итак, я знаком с терминологией и основами, однако меня смущает, когда имитировать или делать фабрику для данных.

Кроме того, как мне проверить, что метод edit действительно вызывает метод wfs ?

UPDATE:
Вот некоторые спецификации, которые я написал, которые дают 100% покрытие (протестировано SimpleCov). Это лучший способ проверить вышеуказанные методы.

  context " When #edit is called, it" do
    it "assigns @all_widgets & other variables if widget for given widget_id is present" do
      widget = Factory.create(:widget)
      get :edit, :id => widget.id
      assigns.each {|a| a.should be_kind_of(Array)}
      response.should be_success
      response.should render_template("edit")
    end
    it "redirects_to widgets_url if widget for given widget_id is not present" do
      widget = Widget.stub!(:find).with(12)
      get :edit, :id => 12
      response.should redirect_to(widgets_url)
      response.should be_redirect
    end
  end

Приветствуются комментарии по улучшению вышеуказанных спецификаций

1 Ответ

0 голосов
/ 06 июля 2011

Вы должны издеваться над WidgetFeature. Таким образом, тесты будут проходить быстрее, так как это не затронет БД. И чтобы проверить, вызывает ли метод edit метод wfs , вы можете использовать should_receive.

...