Тестирование Rails form_tag в Rspec - PullRequest
0 голосов
/ 12 февраля 2012

Я не могу смоделировать мой form_tag в Rspec.Form_tag будет упаковывать хэш параметра как простой хеш, в то время как Rspec будет упаковывать хэш с параметрами с параметрами, в данном случае внутри: хеш сеанса, например:

{"сеанс" => {"email" => "billy@example.com", "password" => "foobar"}, "controller" => "session", "action" => "create"}

vs Rails form_tag:

{"utf8" => "✓", "authenticity_token" => "AiurjCANkzCJFl + oiJK2tQVzzxrET260bo1wxuDHB74 =", "email" => "billy@example»"password" => "foobar", "commit" => "Войти в систему", "action" => "create", "controller" => "session"}

Контроллер Sessionsиспользуя:

user = User.find_by_email(params[:email])

для извлечения параметра электронной почты.Это будет работать для разработки, но для теста Rspec я должен был бы использовать:

user = User.find_by_email(params[:session][:email])

Вот мой последний тест Rspec:

describe "success" do
before(:each) do
  @user = Factory(:user)
  @attr = {:email => @user.email, :password => @user.password }
end

it "should redirect to the user show page" do
  #post :create, :session =>   @attr #same results
  post sessions_path(:email => @user.email, :password => @user.password)
  response.should have_selector('h1', :content => @user.full_name)
end
end

Это не удастся из-за разницы вхэш параметра выше.Есть ли способ в Rspec отправлять параметры контроллеру сеанса в одном хеше, чтобы они соответствовали тегу form_tag, как показано выше?

1 Ответ

0 голосов
/ 06 января 2013

Вы можете попробовать передать параметры вручную в ваших тестах

describe "success" do
before(:each) do
  @user = Factory(:user)
  @attr = {:email => @user.email, :password => @user.password }
end

it "should redirect to the user show page" do
  post :create, :email => @user.email, :password => @user.password
  response.should have_selector('h1', :content => @user.full_name)
end
end

Это отправит параметры вашему методу в контроллере как

{... "email" => "billy@example.com", "password" => "foobar" ...}

...