RoR Tutorial Глава 9 Сбой теста - PullRequest
0 голосов
/ 05 апреля 2011

Я изучал учебник MHartl и у меня есть 5 постоянных ошибок, глава 9, все из которых касаются LayoutLinks.Я проверил и перепроверил, и я не вижу, чем мой код отличается от его, но выполнение его кода на моем компьютере проходит все тесты.

Я вставил ниже пример ошибки, подчеркивая, что она кажетсяпоказывать корневую страницу (через «посещение корневого пути») без входа в систему даже после прохождения набора инструкций «factory (: user) -> fill_in info -> click_button».Так что где-то там, я думаю, что я либо просто теряю статус logged_in, либо вообще не регистрируюсь.

Есть идеи?Спасибо большое.Это довольно смущает.

Это пример ошибки:

LayoutLinks when signed in should have a signout link
     Failure/Error: response.should have_selector("a", :href => signout_path,
       expected following output to contain a <a href='/signout'>Sign Out</a> tag:
       <!DOCTYPE html>
       <html>
       <head>
...
...
<li><a href="/">Home</a></li>
             <li><a href="/help">Help</a></li>
               <li><a href="/signin">Sign in</a></li>
           </ul></nav></header><!--
       <header>
         <nav class="round">
           <ul>
             <li><a href="/">Home</a></li>


             <li><a href="/help">Help</a></li>

             <li><a href="/signin">Sign In</a></li>
           </ul>
         </nav>
...

Ответы [ 8 ]

3 голосов
/ 01 мая 2011

У меня была та же проблема, и я понял, что вызов Factory (: user) не сохранял пользователя в базе данных, поэтому я использовал следующее, чтобы заставить его работать:также придется добавить следующее, чтобы очистить базу данных после запуска теста

after(:each) do
User.find_by_email(@user.email).destroy
end
2 голосов
/ 05 апреля 2011

Разве это не просто?У вас есть «Войти», но нет пути выхода :) То есть, возможно, вам следует добавить

<li><a href="/signout">Sign Out</a></li>

к вашему представлению.

0 голосов
/ 20 ноября 2011

При выполнении главы 9 Учебника у меня была та же проблема. Причиной оказалась моя собственная неточность в наборе кода.

Я выяснил (манипулируя _header.html.erb), что метод signed_in?, определенный в app/helpers/session_helper.rb, работал неправильно и все из-за дополнительного @.

У меня было это (с помощью переменной экземпляра):

def signed_in?
    ! @current_user.nil?
end

Но следовало бы использовать метод current_user вместо:

def signed_in?
    ! current_user.nil?
end
0 голосов
/ 22 июня 2011

Со мной произошло то же, что и с Аланом апом Ризиартом

Моя проблема была со второй строкой в ​​этом блоке ...

def sign_in(user)
  cookies.permanent.signed[:remember_token] = [user.id, user.salt]
  self.current_user = user
  logger.debug "sign_in(user) - #{self.current_user}"
end

... Я случайно поставил[user.id], [user.salt]

0 голосов
/ 07 мая 2011

Нашел в моем случае, возможно, стоит проверить ваш. Я никогда не входил должным образом, потому что в файле user.rb self.authenticate_with_salt моя первая строка была

user = find_by_id(:id)

вместо

user = find_by_id(id)

с учетом того, что позаботились о прохождении тестов, и я получил ссылки для выхода и т. Д.

0 голосов
/ 30 апреля 2011

Я вижу ту же проблему, и я поместил в журналы, чтобы проверить, что происходит. В SessionsHelper >> sign_in я вижу, что @current_user устанавливается правильно. Позже, когда мы отображаем страницу пользователя, она вызывает SessionsHelper >> signature_in? но теперь @current_user равен nil, поэтому я не отображаю ссылки «Выйти» и «Профиль», и два теста не пройдены.

Кажется, что происходит то, что когда мы выполняем вход, мы делаем это в экземпляре SessionsController, который вызывает метод sign_in во включенном модуле, который, в свою очередь, устанавливает @current_user в этом экземпляре SessionsController . Затем он перенаправляет пользователя, который передает управление на UsersController, и код в _header.html.erb, который вызывает signature_in? выполняется в контексте UsersController . Однако у этого контроллера есть собственная копия переменной @current_user, которая не выполняется при запуске sign_in в SessionsController, поэтому он возвращает nil.

0 голосов
/ 12 апреля 2011

Похоже, что тест не регистрирует пользователя правильно. Вы можете сравнить свой код с завершенным примером приложения , чтобы увидеть, поможет ли это решить проблему.

0 голосов
/ 10 апреля 2011

Работает ли страница должным образом, когда вы запускаете ее самостоятельно через браузер?То есть, когда вы входите в систему, вы получаете ссылку «Выйти»?

См. Также: config.cache_classes = false, испортить тесты rspec?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...