Как правильно проверить это действие контроллера с Следует?
У меня есть следующие действия контроллера и тест. Я новичок в тестировании с Ifa и знаю, что есть области моего контроллера, которые я могу тестировать дальше. Например, мои флеш-сообщения, а также проверка рендеров.
Итак, мой вопрос, как бы я правильно протестировал это действие контроллера в Ifa?
Мой контроллер действия (имена были изменены, чтобы защитить невинных):
def my_action
return redirect_to(root_url) if @site.nil?
@owner = current_site.owner
if request.post?
if params[:password].blank? || params[:email].blank?
flash[:error] = "You must fill in both the e-mail and password fields"
render :action => "my_action"
else
if @owner.authenticated?(params[:password])
@owner.login = params[:email]
@owner.save!
@owner.do_some_method
flash[:success] = "Success."
render :action => "my_action"
else
flash[:error] = "Incorrect password"
render :action => "my_action"
end
end
end
end
Мой тест:
context "on POST to :my_action" do
setup do
Owner.any_instance().expects(:do_some_method)
post :my_action, :email => 'foo@bar.com', :password => 'test'
end
should_assign_to :owner
should "Change name and verify password and resend activation key" do
assert_equal true, assigns(:owner).authenticated?('test')
assert_equal 'foo@bar.com', assigns(:owner).login
end
should_respond_with :success
end
1 ответ
Сейчас кажется, что вы тестируете функциональность, специфичную для модели внутри вашего контроллера, которая должна быть в модульном тесте.
Я бы посоветовал перефакторинг вашего контроллера, чтобы включить необходимую логику для обновления электронной почты владельца внутри модели владельца. Сделав это, вы сможете упростить контроллер до простого if update; else; end
Тип заявления и значительно упростить тест контроллера. Переместив логику в модель, вы можете использовать встроенные в Rails валидации.
Несколько других вещей, чтобы рассмотреть:
- Перенаправление после завершения действия POST предотвращает случайную публикацию пользователем сообщения (большинство браузеров будут жаловаться, когда пользователь попытается это сделать).
- Переместите проверку для @site, а также присваивание @owner
before_filters
если это делается более одного раза внутри контроллера. - Вы можете избежать проверки
if request.post?
либо сverify
или создание маршрута в `config/rout.rb'.
Рекомендации: