Огурец: неожиданное удаление объекта из базы данных - PullRequest
0 голосов
/ 04 февраля 2011

Я использую 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

...