Как в Rails тестировать модификации экземпляра модели, сделанные в контроллере? - PullRequest
0 голосов
/ 10 февраля 2011

Я только начинаю писать о тестировании для моего приложения на Rails. Я использую Factory Girl и Shoulda в приложении Rails 3. В моем контроллере у меня есть:

def create
@topic = @forum.topics.build(params[:topic])
@topic.user = current_user

#So the topic gets pushed to the top without any replies
@topic.last_poster = current_user
@topic.last_post_at = Time.now

respond_to do |format|
  if @topic.save
    format.html { redirect_to(forum_topic_path(@topic.forum, @topic), :notice => 'Topic was successfully created.') }
    format.xml  { render :xml => @topic, :status => :created, :location => @topic }
  else
    format.html { render :action => "new" }
    format.xml  { render :xml => @topic.errors, :status => :unprocessable_entity }
  end
end
end

Мой вопрос: как мне написать тест, проверяющий, что @ topic.last_post_at получает метку времени и правильно сохранен, и я бы написал этот тест как функциональный или модульный тест?

1 Ответ

2 голосов
/ 10 февраля 2011

Во-первых, я бы перенес большую часть этой функциональности в модель.Например:

class Topic
  after_create :set_defaults

  protected

  def set_defaults
    update_attributes :last_poster => self.user, :last_post_at => Time.now
  end
end

Затем я написал бы тест модели, чтобы убедиться, что время и пользователь установлены, и упростил код моего контроллера следующим образом:

def create
  @topic = @forum.topics.build(params[:topic].merge({:user => current_user}))

  respond_to do |format|
    ...
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...