Почему мои объекты приборов не доступны в моем Rails Test :: Unit test? - PullRequest
3 голосов
/ 07 февраля 2009

Согласно этому руководству по Rails , если вы создаете прибор, он становится доступным в вашем классе тестирования.

У меня есть этот прибор в users.yml:

<%
  stan = User.new
  stan.username = 'stan'
  stan.set_hashed_password('mysterio')
  stan.email = 'stan@abc.com'
%>

stan:
  username: <%= stan.username %>
  hashed_password: <%= stan.hashed_password %>
  password_salt: <%= stan.password_salt %>
  email: <%= stan.email %>

Следуя руководству по Rails, я пытаюсь получить к нему следующий доступ:

class SessionsControllerTest < ActionController::TestCase

  @user = users(:stan)

  # ...

end

Я получаю эту ошибку:

./test/functional/sessions_controller_test.rb:5: undefined method `users' for SessionsControllerTest:Class (NoMethodError)
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `gem_original_require'
    from /usr/local/lib/ruby/site_ruby/1.8/rubygems/custom_require.rb:31:in `require'
    from /usr/local/lib/ruby/gems/1.8/gems/activesupport-2.2.2/lib/active_support/dependencies.rb:155:in `require'

Ответы [ 4 ]

7 голосов
/ 07 февраля 2009

Попробуйте поставить

fixtures :users

после объявления вашего класса

5 голосов
/ 07 февраля 2009

Спасибо за помощь, ребята. Я понял, что у меня были различные объявления и вызовы, структурированные неправильно. Это не ясно объяснено в руководстве, которое я цитировал, но, очевидно, users(:stan) работает только внутри блока should или в чистом Test :: Unit внутри метода test_.

5 голосов
/ 07 февраля 2009

Убедитесь, что у вас есть

fixtures :all

В вашем test_helper.rb

0 голосов
/ 20 мая 2015

Это СУПЕР старый вопрос, но у меня была похожая проблема только сейчас, когда я просматривал учебник по рельсам.

У меня есть метод настройки в начале моего интеграционного теста UsersLoginTest, и по какой-то причине прибор, на который я ссылался, не работал внутри тестов. Мне нужно было поставить строку вверху теста @user = users (: michael), чтобы она заработала.

В конце концов, я обнаружил, что я продублировал объявление Class вверху файла, скопировав его LAZY и вставив из учебника. Так что, если кто-то еще сталкивался с этой темой с аналогичной проблемой, связанной с неработающими приборами, проверьте, не сделали ли вы ту же самую глупую ошибку, что и я, и дублировали верхнюю часть файла!

require 'test_helper'

class UsersLoginTest < ActionDispatch::IntegrationTest

  def setup
    @user = users(:michael)
  end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...