Проблем с функционални тестове
-
Имам следния проблем — искам да си тествам контролер за регистрация на потребител. Първо пускам заявка get за да проверя instance променливите, обаче те са nil. Второ опитвам се да регистрирам този потребител със заявка post и нужните параметри, но и това се чупи.
Ето кода на тестовете:
def test_registration_page get :register assert_not_nil assigns[:title] #чупи се тук. assert_equal "Register", assigns[:title] assert_response :success assert_template :register assert_tag "form", :attributes => { :action => "user/register", :method => "post" } end def test_registration_success post :register, :user => { :screen_name => "blablaenough", :email => "sadasj@bfav.com", :password => "long_enough" } user = assigns[:user] assert_not_nil user # и тук се чупи... new_user = User.find :all, :conditions => [ :screen_name => user.screen_name ] assert_equal user, new_user assert_equal "OK, fine! :)", flash[:notice] assert_redirected_to :action => "index" end
Ето кода на контролера:
class UserController < ApplicationController def initialize @title = "Register" super end def index end def register if request.post? and params[:user] @user = User.new params[:user] if @user.save flash[:notice] = "OK, fine! :)" #render :text => "User created!" redirect_to :action => "index" end end end end
Публикувано преди повече от 4 години -
Хмм, как се слага таг за код?
Мерси, Дойчо :)Публикувано преди повече от 4 години -
С риск да повторя няколко човека:
{ { { #без интервали
код, код
} } } #пакдругото – Textile :)
Публикувано преди повече от 4 години -
[:foo => 123]
не не е добра идея. Наистина работи, но не както очакваш. Оправи си го. Това ти е във find-а в теста.Какво връща assigns.inspect ?
Публикувано преди повече от 4 години -
Ам, и не пиши конструктори на контролери. По-добро after filter, понеже туко виж конструкторите започнат да вземат аргументи и кода ти ще се счупи.
Публикувано преди повече от 4 години -
Някъде в бързината не съм прочел това:
As is the case with normal Hash objects, you can access the values by referencing the keys by string. You can also reference them by symbol name, except for assigns. For example: flash["gordon"] flash[:gordon] session["shmession"] session[:shmession] cookies["are_good_for_u"] cookies[:are_good_for_u] # Because you can't use assigns[:something] for historical reasons: assigns["something"] assigns(:something)
Прав си за филтъра :)
Не е ли обаче before_filter?
Можеш ли да ми покажеш какво имаш предвид за find-а?
Видях, че не сочат към един и същи обект, въпреки, че всичко им е еднакво.Edit: User.find_by_screen_name?
Публикувано преди повече от 4 години -
Написал си
new_user = User.find :all, :conditions => [ :screen_name => user.screen_name ]
а си имал предвид
new_user = User.find :all, :conditions => { :screen_name => user.screen_name }
понеже
[1 => 2] == [{1 => 2}]
И да, find_all_by_screen_name е по-добре. find_all, нали.
Публикувано преди повече от 4 години -
Благодаря, така е.
Публикувано преди повече от 4 години
Нов отговор
Трябва да сте вътре за да отговаряте.