Функциональное тестирование с помощью Rails и Devise. Что поставить в мои фикстуры?

интерпретатор в интерпретаторе

стандартная библиотека код модуль позволяет нам, Вы включаете свой собственный read-eval-print цикл в программе или выполняете целый вложенный интерпретатор. Например, (скопировал мой пример от здесь )

$ python
Python 2.5.1 (r251:54863, Jan 17 2008, 19:35:17) 
[GCC 4.0.1 (Apple Inc. build 5465)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> shared_var = "Set in main console"
>>> import code
>>> ic = code.InteractiveConsole({ 'shared_var': shared_var })
>>> try:
...     ic.interact("My custom console banner!")
... except SystemExit, e:
...     print "Got SystemExit!"
... 
My custom console banner!
>>> shared_var
'Set in main console'
>>> shared_var = "Set in sub-console"
>>> import sys
>>> sys.exit()
Got SystemExit!
>>> shared_var
'Set in main console'

Это чрезвычайно полезно для ситуаций, где Вы хотите принять заданный сценарием вход от пользователя или запросить состояние VM в режиме реального времени.

TurboGears использует это для большого эффекта при наличии WebConsole, от которого можно запросить состояние Вас живое веб-приложение.

26
задан Jez Caudle 2 January 2011 в 08:35
поделиться

4 ответа

Решение для Devise до 3.2.0

Я думаю, это может быть то, что вы ищете:

User.new.send(:password_digest, 'password')

Это работает, когда соль равна нулю.

И, следовательно, в своем приборе вы можете сделать это:

one:
  email: 'some@user.com'
  encrypted_password: <%= User.new.send(:password_digest, 'password') %>

Решение для версий от 3.2.0 до 3.5.0

At Devise 3.2.0, метод был создан именно для этой цели (обновление @Inkling). Для этих версий шифрованный пароль должен быть определен следующим образом:

encrypted_password: <%= Devise.bcrypt(User, 'password') %>

где User - класс вашей пользовательской модели.

Обратите внимание, что это применимо, только если вы используете алгоритм шифрования по умолчанию (bcrypt).


Решение для Devise версий 3.5.1 и выше

Как отметил Катаржина : Device.bcrypt устарел в версии 3.5.1. Начиная с этой версии, encrypted_password должен быть определен следующим образом:

encrypted_password: <%= Devise::Encryptor.digest(User, 'password') %>
66
ответ дан 28 November 2019 в 06:21
поделиться

Я разобрался с проблемой - я неправильно вошел в систему.

Мой тест должен выглядеть следующим образом:

test "should get index" do
    @user = users(:one)
    sign_in @user
    get :index
    assert_response :success
    assert_select 'span#loggedin', :count => 1
 end

Это также работает и исключает строку кода:

test "should get index" do
    sign_in users(:one)
    get :index
    assert_response :success
    assert_select 'span#loggedin', :count => 1
end

Мое понимание приспособлений отсутствовало ...

Но вернемся к вопросу - что ставить в светильники:

one:
 email: jez@example.com
 encrypted_password: $2a$10$PoBe1MvkoGJsjMVTEjKqgeBUp.xdfzWoiDjBzQhtLAj16NqIa2fOy
 password_salt: $2a$10$PoBe1MvkoGJsjMVTEjKqge
 reset_password_token: nil
 remember_token: nil
 remember_created_at: nil
 sign_in_count: 1
 current_sign_in_at: 2011-01-02 08:31:23
 last_sign_in_at: 2011-01-02 08:31:23
 current_sign_in_ip: 127.0.0.1
 last_sign_in_ip: 127.0.0.1
 confirmation_token: nil
 confirmed_at: 2011-01-02 08:31:23
 confirmation_sent_at: 2011-01-02 08:30:59
 failed_attempts: 0
 unlock_token: nil
 locked_at: nil
 authentication_token: nil
 created_at: 2011-01-02 08:30:59
 updated_at: 2011-01-02 08:31:23
 age: 36

Теперь это работает. Если проще создать пользователя в dev и вставить данные в фиксатор, пожалуйста, пишите.

7
ответ дан 28 November 2019 в 06:21
поделиться

Это работает для меня.

Я ничего не изменил в своем пользовательском приборе, это выглядит так:

one:
  id: 1
  name: MyString
  email: mystring@test.com
  group_id: 2
  encrypted_password: <%= Devise.bcrypt(User, 'password') %>

Но я изменил свой test_helper.rb и добавил это в класс ActionController (это будет работать для всех тесты контроллеров):

class ActionController::TestCase
    include Devise::TestHelpers

    setup do
        sign_in users(:one)
    end
end
1
ответ дан 28 November 2019 в 06:21
поделиться

Еще один совет. Это прекрасно сработало для меня:

http://brandonhilkert.com/blog/managing-login-passwords-for-capybara-with-minitest-and-rails-fixtures/

И, похоже, это СУХОЕ и хорошее решение.

2
ответ дан 28 November 2019 в 06:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: