Помощник Синатры в огурце - PullRequest
5 голосов
/ 26 ноября 2009

В настоящее время я пытаюсь избавиться от вспомогательного метода моего приложения Sinatra из Огурец .

У меня есть приложение Sinatra с простой аутентификацией сеанса (по файлам cookie), и я хочу включить аутентификацию, отключив вспомогательный метод logged_in? для моих сценариев Cucumber . С Синатрой и Огуреком, похоже, есть проблема с сессиями, поэтому я подумал о том, чтобы просто использовать Мокко для решения этой проблемы.

Однако я не знаю, как получить доступ к экземпляру Sinatra::Application из Given -Block, чтобы заглушить метод.

Ответы [ 2 ]

3 голосов
/ 26 ноября 2009

Похоже, мне нужно напрямую переопределить мой механизм аутентификации в Before do ... end -блоке

Итак, я получил hooks.rb в файле features/support/, перезаписывающий мой logged_in? и метод current_user.

Before do
  MySinatraApplicationClass.class_eval do
    helpers do
      def logged_in?
        return true
      end
      def current_user
        # This returns a certain Username usually stored 
        # in the session, returning it like
        # that prohibits different user logins, but for
        # now this is enough for me
        "Walter"
      end
    end
  end
end

Единственное, о чем мне нужно было позаботиться, это то, что никакие другие действия в приложении не читаются напрямую из session, а скорее используют эти помощники.

К сожалению, я думаю, что этот способ обработки приложений Sinatra на основе сеансов через Cucumber уже описан где-то еще, и я просто подумал , что моя проблема в другом .

2 голосов
/ 26 ноября 2009

Вы можете получить правильный контекст, используя Sinatra::Application.class_eval

Редактировать: полный ответ см. В оригинальном ответе автора.

...