не работает должным образом в интеграционных тестах рельсов - PullRequest
1 голос
/ 03 января 2012

Итак, во-первых, я использую встроенный комплект интеграционных тестов, который поставляется с Rails, а не огурец, вебрат и т. Д. Я хочу освоить встроенный комплект перед переключением на другой комплект тестов.

используя devise 1.4.2 и rails 3.1.

в любом случае, я пишу интеграционный тест, который имитирует регистрацию пользователя для учетной записи, подтверждение учетной записи, вход в систему и заполнениеформа.это где вещи, кажется, идут на юг.Из того, что я могу сказать, у Devise возникли проблемы с моим контроллером, создайте действие, и из-за этих проблем с devise current_user равен nil.вот фрагмент:

require 'test_helper'

class SignupTest < ActionDispatch::IntegrationTest

test "new signup and application" do

  go_to_signup_page
  create_new_account :user => {:email => "kjsdfkjksjdf@sdfsdf.com", :user_name => "dfdfdf",     
  :password => "dfdfdfdfdfdf", :password_confirmation => "dfdfdfdfdfdf"}
  confirm_account_creation
  go_to_signin_page
  log_in
  go_to_form
  submit_form
end

..... другие тесты ....

def go_to_form
  get "/applications/new"
  assert_response :success
  assert_template "applications/new"
  assert_equal 'Please fill out this application', flash[:notice]
end


def submit_form
  post "/applications", :application => {.....}
  assert_response :redirect
  assert_equal 'Application Successful ', flash[:notice]
end

И в моем контроллере у меня есть

  before_filter :authenticate_user!

Счто я определяю, "def go_to_form" проходит хорошо.Но когда я пытаюсь POST в «def submit_form», он говорит мне, что мне нужно «Пожалуйста, войдите или зарегистрируйтесь», ваша типичная ошибка при попытке получить доступ к функции, когда вы еще не вошли в систему.Я полагаю, что эта проблема также приводит к тому, что current_user равен нулю.

Если я удалю before_filter, я отправлю сообщение, но current_user по-прежнему NIL.

Я не могу объяснить, что здесь происходит.Все остальные действия проходят с летающими цветами, кроме этого действия CREATE.

1 Ответ

1 голос
/ 12 января 2012

Это рабочий код, который я использую FactoryGirl, с этим фрагментом кода вы можете успешно войти в систему, чтобы убедиться, что вы ввели точный адрес электронной почты и пароль. Но есть и встроенные тестовые примеры в геме Devise.

  setup do
    @user = FactoryGirl.create(:user)
  end

  def do_login
    visit '/'
    click_link "Sign in"
    fill_in 'user_email', :with => 'xxx@xxx.com'
    fill_in 'user_password', :with => 'xxxx'
    click_on('sign_in')
  end

  test 'should go to section index' do
    do_login
    assert page.has_content?('Signed in successfully.')
  end

Это фабрика:

FactoryGirl.define do
  factory :user do

    email "xxx@xxx.com"
    password "xxxx"
    password_confirmation "xxxx"
    :user_name "admin"
    confirmed_at "#{Time.now }"
  end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...