Я использую authlogic в качестве системы аутентификации.
Я написал такой сценарий для огурца:
Scenario: test login
Given there are no users
And the following users:
| login |
| user |
Given I authenticate as "user" with password "password"
Then I should not see "Login not found"
И такие шаги:
Given /^the following users:$/ do |table|
table.hashes.each do |attributes|
User.make(attributes)
end
end
Given /^I authenticate as "(.+)" with password "(.+)"$/ do |login, password|
# just for debug
Rails.logger.info "USER!!: #{User.last.inspect}"
And %{I go to login}
# just for debug
Rails.logger.info "USER!!: #{User.last.inspect}"
And %{I fill in "user_session_login" with "#{login}"}
And %{I fill in "user_session_password" with "#{password}"}
And %{I press "user_session_submit"}
end
Given /^there are no users$/ do
User.destroy_all
end
test.log:
USER!!: #<User id: 1, login: "user" ... >
Processing UserSessionsController#new (for 127.0.0.1 at 2011-02-04 01:54:49) [GET]
Parameters: {"action"=>"new", "controller"=>"user_sessions"}
Rendering template within layouts/application
Rendering user_sessions/new
Rendered partials/_message (1.3ms)
Rendered partials/_ajax_loader (0.6ms)
Completed in 63ms (View: 41, DB: 21) | 200 OK [http://www.example.com/login]
SQL (0.1ms) SET NAMES 'utf8'
SQL (0.1ms) SET SQL_AUTO_IS_NULL=0
User Columns (0.7ms) SHOW FIELDS FROM `users`
User Load (0.3ms) SELECT * FROM `users` ORDER BY users.id DESC LIMIT 1
USER!!: nil
Полный журнал сценария: https://gist.github.com/810405
Итак, сначала «USER !!»пользователь был найден в базе данных.Но после загрузки страницы в базе данных нет пользователей.И не удаляйте записи журнала!
Я не могу распознать причину.Если я выполняю такие действия вручную через скрипт / консоль (загружаю чертежи, создаю пользователя), сценарий / сервер (выполняю действия при входе в систему), то все в порядке и никаких проблем.
Код user_session # new и #create:
class UserSessionsController < ApplicationController
before_filter :require_no_user, :only => [:new, :create]
def new
@user_session = UserSession.new
end
def create
@user_session = UserSession.new(params[:user_session], :auto_register => true)
@user_session.save do |result|
if result
flash[:notice] = I18n.translate "flashes.user_session.created"
redirect_to account_url
else
render :action => :new
end
end
end
end
blueprints.rb (машинист):
User.blueprint do
name
login { Sham.name }
password {'password'}
password_confirmation { password }
email
active {true}
end
Поддержка огурцов / env.rb: https://gist.github.com/810418
Список драгоценных камней (с версиями): https://gist.github.com/810394
Рельсы 2.3.8 + связка, RVM + Ruby 1.8.7, огурец 0.9.4